Muf*_*ffo 9 opencv feature-extraction contour computer-vision edge-detection
我想提取图像的轮廓,表示为一系列点坐标.
随着Canny我能够产生包含图像的只有边缘的二值图像.然后,我试图findContours用来提取轮廓.但结果并不好.
对于每个边缘,我经常得到2条线,就像它被认为是一个非常薄的区域.我想简化我的轮廓,以便我可以将它们画成单行.或者可以用不同的函数提取它们,直接产生正确的结果会更好.
我看了一下OpenCV的文档,但我找不到任何有用的东西,但我想我不是第一个遇到类似问题的人.我可以使用任何功能或方法吗?
这是我到目前为止编写的Python代码:
def main():
    img = cv2.imread("lena-mono.png", 0)
    if img is None:
        raise Exception("Error while loading the image")
    canny_img = cv2.Canny(img, 80, 150)
    contours, hierarchy = cv2.findContours(canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    contours_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
    scale = 10
    contours_img = cv2.resize(contours_img, (0, 0), fx=scale, fy=scale)
    for cnt in contours:
        color = np.random.randint(0, 255, (3)).tolist()
        cv2.drawContours(contours_img,[cnt*scale], 0, color, 1)
    cv2.imwrite("canny.png", canny_img)
    cv2.imwrite("contours.png", contours_img)
比例因子用于突出轮廓的双线.以下是图片的链接:
任何建议将不胜感激.
如果我理解你的话,你的问题与在参数 (霍夫变换)意义上寻找线条无关.
相反,该findContours方法返回单行的多个轮廓是一个问题.
这是因为坎尼是一个边缘检测器-这意味着它是过滤切合发生在图像强度梯度两者的线的两侧.
所以你的问题更像是:"我如何转换低一级边缘功能单行?",或者:"我怎么能导航轮廓层次检测单线条"
这是一个相当常见的主题 - 以下是一篇提出一个解决方案的帖子:
| 归档时间: | 
 | 
| 查看次数: | 12169 次 | 
| 最近记录: |