使用OpenCV 2.4.9检测矩形

时间:2017-07-10 07:48:43

标签: python opencv

我想检测图像中的矩形,这是我正在使用的代码:

    import cv2 ; import numpy as np
    img = cv2.imread('/home/stagiaire/Bureau/new_photos_mire/0294/new/corrigees/GRE.TIF',0)
ret,thresh = cv2.threshold(img,127,255,0)
    contours,hierarchy = cv2.findContours(thresh, 1, 2)
    cnt = contours[0]
    x,y,w,h = cv2.boundingRect(cnt)
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

    rect = cv2.minAreaRect(cnt)
    box = cv2.boxPoints(rect)
    box = np.int0(box)
    im = cv2.drawContours(im,[box],0,(0,0,255),2)

我得到的消息错误是:

AttributeError: 'module' object has no attribute 'boxPoints'

关于这行代码:

    box = cv2.boxPoints(rect)

我相信它是由于我正在使用的OpenCV版本(2.4.9)引起的。我现在不可能拥有3.0版本,所以我可以用openCV 2.9和Python 2.7检测矩形吗?

修改

正如Surabhi Valma的回答,这可能是一个解决方案:

Just add cv2.cv.BoxPoints(rect) instead of cv2.boxPoints(rect)

3 个答案:

答案 0 :(得分:1)

当我通过releases时找不到2.9。可能你的版本是2.4.9。如果您尝试3.x,它可能会工作。

已经跟踪了opencv-issue / feature已关闭 此功能肯定适用于3.0.0-dev或更高版本,请尝试升级并检查。

答案 1 :(得分:1)

最新的OpenCV 2版本是2.4.13.2;没有2.9。无论如何,这个方法从未包含在带有Python包装器的cv2库中。 您可以选择升级到OpenCV 3+或使用(不推荐使用的)cv模块(旧版本的Python OpenCV包装器中包含)来直接访问C方法:

rect = cv2.minAreaRect(cnt)
box = np.int0(cv2.cv.BoxPoints(rect))
cv2.drawContours(im,[box],0,(0,0,255),2)

答案 2 :(得分:1)

只需添加cv2.cv.BoxPoints(rect)代替cv2.boxPoints(rect)