首页 > 解决方案 > 有什么方法可以在 OpenCV 的轮廓检测中只检测矩形,而忽略其他文本检测?

问题描述

在此处输入图像描述我想使用 OpencV 轮廓检测直观地检测网页的所有文本框。但是在这里,它也在检测文本,我需要过滤掉其他结果并只检测矩形框。

我只想要框和按钮的矩形检测并过滤掉所有其他文本检测。

标签: pythonopencv

解决方案


使用以下代码作为起点:

img =  cv2.imread('amazon.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# inverse thresholding
thresh = cv2.threshold(gray, 195, 255, cv2.THRESH_BINARY_INV)[1]

# find contours
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]

mask = np.ones(img.shape[:2], dtype="uint8") * 255
for c in contours:
    # get the bounding rect
    x, y, w, h = cv2.boundingRect(c)
    if w*h>1000:
        cv2.rectangle(mask, (x, y), (x+w, y+h), (0, 0, 255), -1)

res_final = cv2.bitwise_and(img, img, mask=cv2.bitwise_not(mask))

cv2.imshow("boxes", mask)
cv2.imshow("final image", res_final)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

图 1:原始图像:

在此处输入图像描述

图 2:所需轮廓的掩码:

在此处输入图像描述

图 3:原始图像中检测到的轮廓(期望):

在此处输入图像描述


推荐阅读