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
2条答案
按热度按时间xe55xuns1#
你的任务很简单。
1.可选的smoothing(高斯滤波器)-您必须对数据进行试验,看看是否有帮助
1.边缘检测(将图像转换为表示边缘的线条)-例如cv::Canny
1.在Hough变换中找到两个最大值(最长线)
1.你将有两个关于直线的问题,然后你可以利用这些信息来计算它们之间的距离
请注意,使用这种方法时,图像不必是直的。您将使用线方程,您必须巧妙地处理这些方程。如果这两条线是平行的,则有一个简单的公式来获得它们之间的距离。如果它们不是完全平行的,则必须考虑此整数,并使用图像区域的信息来获得平均距离。
svujldwt2#
求出通道宽度的简单方法如下:
但这会导致距离计入非常小的白色斑点。
要解决此问题,有以下几种选择:
1.使用
opencv
morphological transformation
预处理图像。1.使用
opencv
gaussian filter
或类似命令预处理图像。1.更新代码以使用更大的窗口。
另一个解决方案是应用
opencv's findContours
。