在 MSER 检测区域上执行 convexHull 时出错
Error performing convexHull on MSER detected regions
我在 Python OpenCV 中找到了一个 MSER 的例子。当我尝试 运行 时,当它尝试重塑 list
/numpy.array
时出现错误。错误是:
AttributeError: 'list' object has no attribute '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()
我认为 mser.detectRegions(img)
在各种发行版本中有所改进。在我的例子中,我有 OpenCV 版本:
import cv2
print cv2.__version__
>>> 3.3.0
并且 mser.detectRegions(img)
是 return 具有两个值而不是单个 return 值的元组。您可以通过忽略元组的第二个值来解决此问题:
regions, _ = mser.detectRegions(img)
我提版本的点是因为网上有很多例子可以使用regions = mser.detectRegions(img)
。这可能会导致混淆。
截至目前,我不确定导致这种歧义的版本,因此我建议快速解决您的问题。
我在 Python OpenCV 中找到了一个 MSER 的例子。当我尝试 运行 时,当它尝试重塑 list
/numpy.array
时出现错误。错误是:
AttributeError: 'list' object has no attribute '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()
我认为 mser.detectRegions(img)
在各种发行版本中有所改进。在我的例子中,我有 OpenCV 版本:
import cv2
print cv2.__version__
>>> 3.3.0
并且 mser.detectRegions(img)
是 return 具有两个值而不是单个 return 值的元组。您可以通过忽略元组的第二个值来解决此问题:
regions, _ = mser.detectRegions(img)
我提版本的点是因为网上有很多例子可以使用regions = mser.detectRegions(img)
。这可能会导致混淆。
截至目前,我不确定导致这种歧义的版本,因此我建议快速解决您的问题。