OpenCV距离变换输出错误

时间:2013-01-14 07:39:16

标签: c opencv

我正在尝试使用OpenCV库为C找到二进制图像的每个像素的距离变换。根据DT的规则,每个零(黑色)像素的值应为0.而255的值(应用距离变换后,像素应该是到零(黑色)像素的最短距离。

我在这里发布了代码。

IplImage *im = cvLoadImage("black_white.jpg", CV_LOAD_IMAGE_GRAYSCALE);
IplImage *tmp = cvCreateImage(cvGetSize(im), 32, 1);
cvThreshold(im, im, 128, 255, CV_THRESH_BINARY_INV);
//cvSaveImage("out.jpg", im);
cvDistTransform(im, tmp, CV_DIST_L1, 3, 0, 0 );
d = (uchar*)tmp->imageData;
da = (uchar*)im->imageData;

for(i=0;i<tmp->height;i++)
                          for(j=0;j<tmp->width;j++)
                          {
                                                   //if((int)da[i*im->widthStep + j] == 255)
                                                   fprintf(f, "pixel value = %d DT = %d\n", (int)da[i*im->widthStep + j], (int)d[i*tmp->widthStep + j]);
                          }
                          cvShowImage("H", tmp);
                          cvWaitKey(0);
                          cvDestroyWindow("H");
fclose(f);

我将像素值及其DT值写入文件。事实证明,0像素中的一些像DT值像65,128等。即它们不是0.此外,我还有一些白色像素的DT值为0(我猜,不会发生,因为它至少应该是1)。

任何形式的帮助都将受到赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我想这是因为CV_THRESH_BINARY_INV会反转你的形象。所以你希望白色的区域实际上是黑色的DT。

原因是,反转图像可能是您的意图。显示图片im并与tmp进行比较以进行验证