基于opencv的对CV_16U深度图像MAT中某点的像素值提取问题

昨天在使用mc[i] = Point2d(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00);//求中心点坐标之后,想提取对应的深度图像中该点的像素值,所以参考了以下博文:

https://blog.csdn.net/thunderstruck/article/details/70209005

https://blog.csdn.net/luxgang/article/details/78063933

使用at:depthin.at(x,y)

编译通过,但是运行时候出现了:段错误 (核心已转储)的错误提示。

于是使用了各种方法解决,试过了各种方法,以为是因为我int16_t之类格式定义不对的,最后根据指针自己写了如下程序:

uint16_t *p; //建立指针
p = depthin.ptr(m);//指针指向depthin图像第m行的开始
p=p+n;//指针+n,即指向此行第n列的格子
uint16_t ixel_val = *p; //获取此指针所指向的数据
cout<< ixel_val<

然后突然意识到:Mat的排列如下:

0 1 2 3 4
1        
2        

那么行对应的是y,列对应的是x。

所以之前的代码都没有问题,问题只是这里的x\y应该反过来:

所以提取(x,y)正确的方法是:

src.at(y,x)

终于解决了。

另外记录下大佬分享的格式对应:

Mat每个格子内的数据格式-----------Mat定义
Mat_---------CV_8U
Mat-----------CV_8S
Nat_---------CV_16S
Mat_--------CV_16U
Mat_-----------CV_32S
Mat_----------CV_32F
Mat_--------CV_64F

img1.at(i,j)[0]= 3.2f;  // B 通道
img1.at(i,j)[1]= 3.2f;  // G 通道
img1.at(i,j)[2]= 3.2f;  // R 通道

 

你可能感兴趣的:(#,OpenCV,段错误,Mat,深度图像)