gpt4 book ai didi

opencv - 访问 OpenCV Mat 元素会给出错误的结果

转载 作者:行者123 更新时间:2023-12-02 16:42:39 25 4
gpt4 key购买 nike

我是 OpenCV 的新手,对如何以正确的方式访问 MAt 有点困惑。

我有两个 IplImages revA 和 revB。我用他们的数据创建新的 Mat 并比较这些矩阵并尝试保存 Mat r 中的差异。现在我需要知道差异在哪里。

我的尝试:

revA=cvLoadImage(argv[1], 1);
revB=cvLoadImage(argv[2],1);

IplImage* changeMap = cvCreateImage(cvGetSize(revA), IPL_DEPTH_8U, 1);

cv::Mat a(revA);
cv::Mat b(revB);
cv::Mat r(changeMap);

cv::compare(a, b, r, CV_CMP_EQ);
imshow( "changes", r);

我看到窗口中存在差异,它们看起来也正确,但是当我尝试执行以下代码之类的操作时,我从来没有找到不是 255 的值...
for(int i=0; i<r.rows; i++){
for(int j=0; j<r.cols; j++){
cv::Vec3b c = r.at<cv::Vec3b>(0,0);
if(c[0] != 255 || c[1] != 255 || c[2] != 255){
printf("%d %d %d\n", c[0], c[1], c[2]);
}
}
}

有人可以弄清楚,我做错了什么吗?

最佳答案

第一个问题是您试图访问 Mat好像它是一个 3 channel 图像,但您清楚地加载了 IplImage作为灰度,即单 channel ,因此您需要执行以下操作:

for(int i=0; i<r.rows; i++){
for(int j=0; j<r.cols; j++){
float pixel = r.at<float>(i,j);
}
}

第二个问题已经在上面的代码中修复了,但是你总是访问索引 0,0 处的像素。而不是 i,j在循环的每次迭代中。呵呵

关于opencv - 访问 OpenCV Mat 元素会给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com