在MSER检测到的区域上执行凸包错误

时间:2018-07-10 08:53:08

标签: python opencv mser

我在Python OpenCV中找到了MSER的示例。当我尝试运行它时,尝试重塑list / numpy.array时出现错误。错误是:

  

AttributeError:“列表”对象没有属性“重塑”

如何解决此问题?在下面的简单代码中,我已注释了发生错误的位置:

import cv2
import numpy as np

img = cv2.imread('../images/Capture2.JPG', 0);
vis = img.copy()
mser = cv2.MSER_create()
regions = mser.detectRegions(img)

hulls = []
for p in regions:
    # Error on below line: 'AttributeError: 'list' object has no attribute 'reshape''
    hulls.append( cv2.convexHull(p.reshape(-1, 1, 2)) )

    # Note a numpy array isn't working either: error: 'ValueError: cannot reshape array of size 2605 into shape (1,2)'
    p = np.array(p)
    hulls.append( cv2.convexHull(p.reshape(-1, 1, 2)) ) 

cv2.polylines(vis, hulls, 1, (0, 255, 0))
cv2.imshow('img', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:1)

我认为mser.detectRegions(img)在各种发行版本上已经有所发展。就我而言,我具有OpenCV版本:

import cv2
print cv2.__version__
>>> 3.3.0

mser.detectRegions(img)返回一个带有两个值而不是单个返回值的元组。您可以通过忽略元组的第二个值来解决此问题:

regions, _ = mser.detectRegions(img)

我提出了版本问题,因为许多在线可用的示例都使用regions = mser.detectRegions(img)。这可能导致混乱。

到目前为止,我不确定导致这种歧义的版本,因此,我建议您快速解决此问题。