gpt4 book ai didi

python - 连接的组件清洁cv2.arcLength OpenCv:断言失败

转载 作者:行者123 更新时间:2023-12-02 17:14:46 24 4
gpt4 key购买 nike

我正在尝试在OpencCV 2.3.4 Python API中实现连接组件的噪声消除,如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'

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

最佳答案

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.

关于python - 连接的组件清洁cv2.arcLength OpenCv:断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15132712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com