gpt4 book ai didi

c - OpenCV 距离变换输出错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:58 26 4
gpt4 key购买 nike

我正在尝试使用 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)。

我们将不胜感激任何形式的帮助。

提前致谢。

最佳答案

我想这是因为 CV_THRESH_BINARY_INV 反转了您的图像。因此,对于 DT,您期望为白色的区域实际上是黑色。

当然,反转图像可能是您的意图。显示图片im并与tmp比较验证

关于c - OpenCV 距离变换输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314709/

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