opencv访问矩阵元素出错!!

cv::MatmapDepthToColor(512,424,CV_8UC3);for(inty=0;y<424;y++)for(intx=0;x<512;x++){p_... cv::Mat mapDepthToColor(512,424,CV_8UC3);
for(int y=0;y<424;y++)
for(int x=0;x<512;x++)
{

p_ir[2]=depthMat.at<uchar>(y,x);
p_ir[0]=x*p_ir[2];
p_ir[1]=y*p_ir[2];
for(int i=0;i<3;i++)
{
P_ir[i]=H_ir[i][0]*p_ir[1]+H_ir[i][1]*p_ir[1]+H_ir[i][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];
}
for(int i=0;i<3;i++)
{
p_rgb[i]=H_rgb[i][0]*P_rgb[0]+H_rgb[i][1]*P_rgb[1]+H_rgb[i][2]*P_rgb[2];
}
p_rgb[0]=p_rgb[0]/p_rgb[2];
p_rgb[1]=p_rgb[1]/p_rgb[2];
if(ceil(p_rgb[0])>=0&&ceil(p_rgb[0])<=flipImagel.cols&&ceil(p_rgb[1])>=0&&ceil(p_rgb[1])<=flipImagel.rows)
{
mapDepthToColor.at<Vec3b>(y,x)=flipImagel.at<Vec3b>(ceil(p_rgb[1]),ceil(p_rgb[0])); }

其中flipImagel矩阵也是CV_8UC3的,
运行出错
template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)
{
CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&
(unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&
CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());
return ((_Tp*)(data + step.p[0]*i0))[i1];

}
什么原因
展开
 我来答
365988768
2015-06-30 · TA获得超过1089个赞
知道小有建树答主
回答量:295
采纳率:75%
帮助的人:281万
展开全部

似乎你开头的这个for循环就有问题,你把rows和clos搞反了吧。。。所以在你后面调用at函数的时候就会出现越界的情况。。。

for(int y=0;y<424;y++)
    for(int x=0;x<512;x++)
追问
貌似是这个问题,还有个问题想问你,如果depthMat是CV_16UC1的,想用.at访问它里面的像素,p_ir[2]=depthMat.at(y,x),这样有什么不对
追答
建议你看看p_ir的定义的类型是否与CV_16U一致。。。不一致就会出错
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式