1

我是 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]);  
        }
    }
}

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

4

1 回答 1

0

第一个问题是您试图访问Mat3 通道图像,但您清楚地将其加载IplImage为灰度,即单通道,因此您需要执行以下操作:

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在循环的每次迭代中。呵呵

于 2012-07-21T03:09:07.557 回答