opencv访问元素出错!!!

用opencv获取Kinect的深度图,想取出每一个像素的深度值但出错。kinect深度信息存在CV_16UC1的Mat里MatdbufferMat1(dheight,d... 用opencv获取Kinect的深度图,想取出每一个像素的深度值 但出错。
kinect深度信息存在CV_16UC1的Mat里
Mat dbufferMat1( dheight, dwidth, CV_16UC1 );

IDepthFrame* pDepthFrame = nullptr;
hResult = pDepthReader->AcquireLatestFrame( &pDepthFrame );
if( SUCCEEDED( hResult ) ){
hResult = pDepthFrame->AccessUnderlyingBuffer( &dbufferSize, reinterpret_cast<UINT16**>( &dbufferMat1.data ) );
现在访问每一个像素,kinect深度图为512*424

for(int y=0;y<424;y++)
for(int x=0;x<512;x++)
{
p_ir[2]=dbufferMat1.at<UINT16>(y,x);
p_ir[0]=x;
p_ir[1]=y;

P_ir[0]=(p_ir[0]-H_ir[0][2])*p_ir[2]/H_ir[0][0];
P_ir[1]=(p_ir[1]-H_ir[1][2])*p_ir[2]/H_ir[1][1];
P_ir[2]=p_ir[2];

for(int i=0;i<3;i++)
{
P_rgb[i]=R[i][0]*P_ir[0]+R[i][1]*P_ir[1]+R[i][2]*P_ir[2]+T[i];
}

p_rgb[0]=ceil((P_rgb[0]* H_rgb[0][0]/P_rgb[2])+H_rgb[0][2]);
p_rgb[1]=ceil((P_rgb[1]* H_rgb[1][1]/P_rgb[2])+H_rgb[1][2]);

if(p_rgb[0]>=0&&p_rgb[0]<REr.cols&&p_rgb[1]>=0&&p_rgb[1]<REr.rows)
{
mapDepthToColor.at<Vec3b>(y,x)=REr.at<Vec3b>(p_rgb[1],p_rgb[0]);
}
else
{
mapDepthToColor.at<Vec3b>(y,x)=Vec3b(255,255,0);
}
}
这程序会运行很短时间 然后在p_ir[2]=dbufferMat1.at<UINT16>(y,x);这句出错

什么原因呢
展开
 我来答
房子a房子a
2015-07-08 · TA获得超过2047个赞
知道小有建树答主
回答量:783
采纳率:85%
帮助的人:565万
展开全部
你看出错信息里面的值,row=424,图像时512x424像素,取值应该是0x0~511x423吧!明显越界了。每台仔细看你的程序,但是你的x,y值双层循环部分:
for(int y=0;y<424;y++)
for(int x=0;x<512;x++)
{
p_ir[2]=dbufferMat1.at<UINT16>(y,x);

是不是缺了一层括号啊!
for(int y=0;y<424;y++)
{
for(int x=0;x<512;x++)
{
p_ir[2]=dbufferMat1.at<UINT16>(y,x);
应该是这样吧!
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式