opencv 测量二值化图像的垂直距离(Open CV)C++

4zcjmb1e  于 2023-02-16  发布在  其他
关注(0)|答案(2)|浏览(181)

所以这应该是直截了当的,但我不是很熟悉OpenCV。
有人能建议一种方法来测量像素距离(红线),如下图所示吗?最好有一些选项,如测量宽度(如红线的结尾和开头所示)或类似的东西。这种测量在ImageJ这样的软件中非常常见,我可以想象在OpenCV中做它应该有点微不足道。
我想采取几个样本accros图像宽度以及。

问候
我正在使用openCV并了解它

xe55xuns

xe55xuns1#

你的任务很简单。
1.可选的smoothing(高斯滤波器)-您必须对数据进行试验,看看是否有帮助
1.边缘检测(将图像转换为表示边缘的线条)-例如cv::Canny

  1. Hough transform以检测线-openCV
    1.在Hough变换中找到两个最大值(最长线)
    1.你将有两个关于直线的问题,然后你可以利用这些信息来计算它们之间的距离
    请注意,使用这种方法时,图像不必是直的。您将使用线方程,您必须巧妙地处理这些方程。如果这两条线是平行的,则有一个简单的公式来获得它们之间的距离。如果它们不是完全平行的,则必须考虑此整数,并使用图像区域的信息来获得平均距离。
svujldwt

svujldwt2#

求出通道宽度的简单方法如下:

distance = []
h = img.shape[0]
for j in range(img.shape[1]):
    line_top = 0
    line_bottom = img.shape[0]
    found_top = False
    found_bottom = False
    for i in range(h):
        if img[i,j,0] > 0 and not found_top:
            line_top = i
            found_top = True
        if img[h-i-1,j,0] > 0 and not found_bottom:
            line_bottom = h-i
            found_bottom = True
        if found_top and found_bottom:
            distance.append(line_bottom-line_top)
            break

但这会导致距离计入非常小的白色斑点。
要解决此问题,有以下几种选择:
1.使用opencvmorphological transformation预处理图像。
1.使用opencvgaussian filter或类似命令预处理图像。
1.更新代码以使用更大的窗口。
另一个解决方案是应用opencv's findContours

相关问题