如何将线条拟合到边缘并找到中心点(opencv)
Posted
技术标签:
【中文标题】如何将线条拟合到边缘并找到中心点(opencv)【英文标题】:how to fit lines to edges and find the center point (opencv) 【发布时间】:2020-11-19 12:38:21 【问题描述】:我有一张图像,我对其应用双边过滤器,然后进行自适应阈值处理以获得下面的图像。
原图(这是物体深度图的截图)
阈值图像
我想将线条拟合到垂直部分/线条并找到中心点,输出如下图:
我似乎无法理解cv2.adaptiveThreshold() 的输出。紫色像素(即我的边缘)如何表示?以及如何安装一条线? MWE:
import cv2
image = cv2.imread("depth_frame0009.jpg")
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
bilateral_filter = cv2.bilateralFilter(gray_image, 15, 50, 50)
plt.figure()
plt.imshow(bilateral_filter)
plt.title("bilateral filter")
#plt.imsave("2dimage_gaussianFilter.png",blurred)
plt.imsave("depthmap_image_bilateralFilter.png",bilateral_filter)
th3 = cv2.adaptiveThreshold(bilateral_filter,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
plt.figure()
plt.imshow(th3)
========
编辑:
精巧的边缘 轮廓
【问题讨论】:
【参考方案1】:它们被表示为一个图像,一个 uint8 的矩阵。
它是紫色和黄色的原因是因为 matplotlib 正在对其应用颜色图。
在绘制图像处理输出图像时,我一般更喜欢使用一些特定的参数,例如
plt.imshow(th3, cmap='gray', interpolation='nearest')
如果您对查找和拟合线条特别感兴趣,您可能希望使用不同的表示形式,例如Hough lines。在图像中找到线条后,您可以选取最适合的线条并找到它们之间的中心点。
【讨论】:
它现在看起来是白色和黑色(而不是紫色和黄色)。将霍夫线应用于adaptiveThreshold的输出不起作用,只有1条对角线穿过整个图像。在 cv2.Canny() 的输出上尝试霍夫线只能检测到水平线 我会在原始图像上做霍夫线。 我认为这行不通。在houghlines() 的文档中,他们是在获得 Canny 边缘后执行此操作的。我厌倦了原始的灰色图像,adaptiveThreshold,但在所有情况下,houglines() 都不起作用。只有当我使用精明的边缘作为输入时,它才会检测到水平线:!hough_lines_image。 分享原始图像对找到可行的解决方案更有帮助。以上是关于如何将线条拟合到边缘并找到中心点(opencv)的主要内容,如果未能解决你的问题,请参考以下文章