【问题标题】:Connected Component Cleaning cv2.arcLength OpenCv: Assertion Failed连接组件清理 cv2.arcLength OpenCv:断言失败
【发布时间】:2013-02-28 10:08:25
【问题描述】:

我正在尝试在 OpencCV 2.3.4 Python API 中实现 Connected Component 噪声消除,如 Learning OpenCV 中从第 287 页开始所述

我已经计算出轮廓的长度,其中我得到了一个神秘的断言错误。

OpenCV Error: Assertion failed (curve.checkVector(2) >= 0 && (curve.depth() == CV_32F || curve.depth() == CV_32S)) in unknown function, file ..\..\..\OpenCV-2.4.3\modules\imgproc\src\contours.cpp, line 1886

这是我的代码:

import cv2
import os
import numpy as np
import cPickle

CVCONTOUR_APPROX_LEVEL = 2
CVCLOSE_ITR = 1

def main():
    mask = cv2.imread('input.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
    findConnectedComponents(mask)

def findConnectedComponents(mask,
                            poly1Hull0 = 1,
                            perimScale = 4,
                            num = None,
                            bbs = None,
                            centers = None):
    cv2.morphologyEx(mask, cv2.MORPH_OPEN, np.array(0), iterations=CVCLOSE_ITR)
    cv2.morphologyEx(mask, cv2.MORPH_CLOSE, np.array(0), iterations=CVCLOSE_ITR)

    contours = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    #the Pickle trick solves some strange type errors
    tmp = cPickle.dumps(contours)    
    contours = cPickle.loads(tmp)

    for contour in contours:
        perimeter = cv2.arcLength(np.array(contour), True)

if __name__ == '__main__':
    main()
    print 'done'

任何想法错误意味着什么以及我如何解决它?

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    1 - cv2.findContours() 为您提供两种输出,轮廓和层次结构。您只指定了轮廓。所以改行如下(这是主要错误):

    contours,hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    

    2 - contours 是一个 numpy 数组列表。每个数组都是一个轮廓。因此,当您将轮廓传递给 cv2.arcLength() 时,您无需再次将其设为 numpy 数组。 (这不是错误,而是不必要的操作),所以将该行更改如下:

       for contour in contours:
            perimeter = cv2.arcLength(contour, True)
    

    现在试试你的代码并检查它是否有效!!!

    有关 OpenCV 上的轮廓操作的更多详细信息,visit here.

    【讨论】:

    • 哇!有效!我不知道为多种返回类型放置变量会对输出产生影响。我实际上已经在使用你的博客作为指南。 (您可能知道他们缺乏 cv2 示例)所以谢谢!
    • 是的,我知道,我想添加更多示例,但我的学术并没有给我太多空闲时间。无论如何,我很高兴它成功了!!!
    猜你喜欢
    • 2018-05-20
    • 2018-08-29
    • 2020-11-07
    • 2021-06-27
    • 2014-02-10
    • 2021-02-13
    • 2012-11-26
    • 2014-11-24
    • 2014-05-28
    相关资源
    最近更新 更多