【问题标题】:Error performing convexHull on MSER detected regions在 MSER 检测到的区域上执行凸包时出错
【发布时间】:2018-07-10 08:53:08
【问题描述】:

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

AttributeError: 'list' 对象没有属性 'reshape'

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

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()

【问题讨论】:

    标签: python opencv mser


    【解决方案1】:

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

    import cv2
    print cv2.__version__
    >>> 3.3.0
    

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

    regions, _ = mser.detectRegions(img)
    

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2017-02-25
      • 2011-10-19
      • 1970-01-01
      • 2018-06-17
      • 2011-09-03
      • 2013-11-21
      • 1970-01-01
      • 2017-12-11
      相关资源
      最近更新 更多