gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:55 25 4
gpt4 key购买 nike

我无法在 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 会将那些 float (我认为)转换为 uchars。结果似乎是黑色的。

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

double maxVal = findMaxDistanceSomehow(); 

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

imshow("dist", displayBuffer);

编辑

第一个思路是对的,但是你居然没有去求maxVal!你说的是看图片,而不是实际提取它。胜利与失败的区别。

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

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

编辑2

并且您必须将 setTo(0) 放在那里。

关于OpenCV distanceTransform 返回意外结果(空 Mat 或原始图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7965526/

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