Opencv 如何计算下图的边缘线距离?

Opencv 如何计算下图的边缘线距离?,opencv,image-processing,halcon,Opencv,Image Processing,Halcon,对于下图,如何获取边缘线的长度并绘制它们的拟合线。如有任何建议,将不胜感激。谢谢 我可能有点晚了,但无论如何。 这是我解决这个问题的办法。 这不是很准确,但它是有效的。 为了达到更好的精度,您需要多张图像。 HDevelop的代码: read_image (Image, 'D:/exp/test/1') access_channel (Image, Image1, 1) *find vertical lines derivate_gauss (Image1, DerivGauss2, 1,

对于下图,如何获取边缘线的长度并绘制它们的拟合线。如有任何建议,将不胜感激。谢谢


我可能有点晚了,但无论如何。 这是我解决这个问题的办法。 这不是很准确,但它是有效的。 为了达到更好的精度,您需要多张图像。 HDevelop的代码:

read_image (Image, 'D:/exp/test/1')
access_channel (Image, Image1, 1)



*find vertical lines
derivate_gauss (Image1, DerivGauss2, 1, 'x')
threshold (DerivGauss2, Region1, -255, -2)
connection (Region1, ConnectedRegions1)

*filter out redundant features
select_shape (ConnectedRegions1, SelectedRegions, ['rect2_len1','rectangularity'], 'and', [100,0.5], [99999,1])

*select rightmost edge
*this would be our reference line
area_center (SelectedRegions, Area, Row, Column)
tuple_sort_index (Column, Indices)
select_obj (SelectedRegions, ObjectSelected, Indices[|Indices|-1]+1)
skeleton (ObjectSelected, Skeleton)
smallest_rectangle2 (Skeleton, Row1, Column1, Phi, Length1, Length2)

*hide right side of the image based on that edge
Shift:=200
Row1Shift:=Row1-(cos(Phi)*Shift)
Column1Shift:=Column1-(sin(Phi)*Shift)
gen_rectangle2 (Rectangle, Row1Shift, Column1Shift, Phi, 999, 200)
complement (Rectangle, InspectionArea)


*find horizontal lines
derivate_gauss (Image1, DerivGauss, 1, 'y')
threshold (DerivGauss, Region, 5, 255)

*find shifted edges
intersection (Region, InspectionArea, RegionIntersection)
connection (RegionIntersection, ConnectedRegions)

*filter out redundant features
select_shape (ConnectedRegions, SelectedRegions1, ['inner_radius','rectangularity'], 'and', [2,0.5], [99999,1])


*print length
smallest_rectangle2 (SelectedRegions1, Row2, Column2, Phi1, Length11, Length21)
Row2Shift:=Row2+(sin(Phi)*Length11)
Column2Shift:=Column2+(cos(Phi)*Length11)
count_obj (SelectedRegions1, Number)

tuple_gen_sequence (0, (Number-1)*20, 20, Sequence)
dev_disp_text (Length11, 'window', Sequence, 0, 'black', [], [])
dev_set_color ('red')
skeleton (SelectedRegions1, Skeleton1)
dev_display(Skeleton1)
结果是:


由于重叠,这将很困难。即使是(大概)手绘的片段,也不清楚它们的终点。你必须给出一个精确的规则。如果没有更多关于可能配置的上下文,就不可能给出一个好的解决方案。否则,标准但较差的答案是“Hough变换”。如果你愿意,我们可以私下讨论,查看我的个人资料。嗨,Daoust。非常感谢你的回答。好啊我将与您联系。有关此解决方案的任何更新。我很想知道