我试图找到二进制图像的每个像素的距离变换,使用 C 的 OpenCV 库。根据 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)。
任何形式的帮助将不胜感激。
提前致谢。