繁体   English   中英

OpenCV distanceTransform返回意外结果(空的Mat或原始图像)

[英]OpenCV distanceTransform returns unexpected results (either an empty Mat or original image)

我无法在Ubuntu上使用OpenCV(2.3)成功计算距离变换。 输出为黑色或原始图像的副本,但从未像预期的那样带有渐变的灰度图像。

我的代码:

Mat input(Size(100,100), CV_8UC1);
circle(input, Point(50,50), 10 Scalar(255,255,255), 15, 0, 0));

Mat output(Size(100,100), CV_32FC1);
distanceTransformation(input, output, CV_DIST_L2, CV_DIST_MASK_3); //Output is completely black
//distanceTransformation(input, output, CV_DIST_L2, CV_DIST_MASK_PRECISE); //Output is a "copy" of input


imshow("in", input);
imshow("out", output);

有什么建议么?

第一次调用是正确的,但是距离很远,不会存储为uchar。 当您要显示它时,OpenCV会将那些浮动(我认为)转换为uchar。 结果似乎是黑色的。

在输出中找到最大值,然后缩放以适合灰度图像

double maxVal = findMaxDistanceSomehow(); 

output.convertTo( displayBuffer, CV_8UC1, 255./maxVal,0);

imshow("dist", displayBuffer);

编辑

第一个想法是正确的,但实际上您并未尝试找到maxVal! 您说的是看图片,而不是实际提取图片。 胜负之间的区别。

因此,使用精确算法计算dist变换,然后

output.convertTo( displayBuffer, CV_8UC1, 10 ,0);

编辑2

并且必须将setTo(0)放在此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM