访问opencv矩阵CV_32S元素
Posted
技术标签:
【中文标题】访问opencv矩阵CV_32S元素【英文标题】:Access opencv matrix CV_32S element 【发布时间】:2012-10-08 15:49:53 【问题描述】:如果我有一个CV_32SC1
类型的矩阵,我应该在函数Mat::at
中使用什么类型名?
例如
Mat X; // for example eye matrix of size 10,10,and type CV_32SC1
X.at<??????>(1,1)=5;
如何找到其他矩阵类型的类型名称?
【问题讨论】:
【参考方案1】:OpenCV 中矩阵类型名称的一般规则是:
CV_<bit_depth>(S|U|F)C<number_of_channels>
S = Signed integer
U = Unsigned integer
F = Float
因此,根据您之前使用的字母(S、U、F)中的哪一个,您将投射<int>
、<unsigned integer>
或<float>
。
【讨论】:
实际上请read您点击批准的评论。 在这种情况下,我更喜欢X.at<uint32_t>(i,j)
。【参考方案2】:
CV_32SC1 是一个 1 通道的有符号 32 位整数,那么我认为 X.at<int>()
应该这样做。
Mat 已经“知道”如何寻址像素,该类型只是将位转换为表达式评估所需的 C++ 值。
我找到了here 一些关于符号的解释。
【讨论】:
不完全正确。对于at<T>
,x 方向的寻址完全基于 T 的大小。如果您的矩阵是 CV_8UC3,那么X.at<cv::Vec3b>(0,2)
将为您提供第一行的第三个像素;但是X.at<uint8_t>(0,2*3+1)
将为您提供相同像素的第二个通道(即与X.at<cv::Vec3b>(0,2)[1]
相同的字节因此,x 方向的间距基于编译时常数sizeof(T)
而不是基于从存储在 Mat 对象中的类型,这在性能上有相当大的差异。它还支持多通道 arr 的“平面”视图。以上是关于访问opencv矩阵CV_32S元素的主要内容,如果未能解决你的问题,请参考以下文章