检索CV_32FC3 CvMat的元素
Retrieve elements of a CV_32FC3 CvMat?
我正在通过调用
创建一个CvMat结构cvCreateMat(1,1,CV_32FC3);
该结构由随后的OpenCV函数调用填充,并填充三个值(据我所知,这是一个1x1数组,额外深度为3)。
那么我如何访问这三个值呢?对
的正常调用CV_MAT_ELEM(myMat,float,0,0)
不能完成这项工作,因为它只期望数组的维度索引而不期望数组的深度。我怎么得到这些值呢?
谢谢!
访问cv::Mat的一般方法是
type value=myMat.at<cv::VecNT>(j,i)[channel]
对于您的情况:
Mat mymat(1,1,CV_32FC3,cvScalar(0.1,0.2,0.3));
float val=mymat.at<Vec3f>(0,0)[0];
所有类型都是使用类cv::VecNT定义的,其中T是类型,N是向量元素的个数。
CV_32FC3
是一个32位浮点数的三通道矩阵。您可以通过声明具有3个浮点数的结构元素并使用CV_MAT_ELEM
来访问每个通道。例如:
typedef struct element {
float cn1;
float cn2;
float cn3;
} myElement;
myElement data[N] = ...;
CvMat mat = cvMat(1, 1, CV_32FC2, data);
float channel1 = CV_MAT_ELEM(mat, float, 0, 0).cn1;
float channel2 = CV_MAT_ELEM(mat, float, 0, 0).cn2;
float channel3 = CV_MAT_ELEM(mat, float, 0, 0).cn3;
编辑:访问每个通道的另一种方法是使用底层ptr
结构:
mat.ptr<float>(x, y) [channel];
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 为什么当我尝试访问 CvMat 数据结构成员的第一个元素时,我会得到这个 ^@
- 检索CV_32FC3 CvMat的元素