OpenCV Python:在图像中查找轮廓/边缘/矩形



我正在使用Python2.7.12和OpenCV 3.0.0-rc1

我正在从事一个文本识别项目。

这就是我现在得到的。查找轮廓后的原始 iamge,第 34 行

如您所见,图像包含许多"框",其中有文本。

我的方法是找到这些盒子,将它们剪成单独的图像,然后将它们提供给TesseractOCR。

该程序将整个图像视为一个轮廓。我怎样才能找到里面较小的一个?

或者,如果您有其他方法,欢迎

法典:

import cv2

def threshold(im, method):
    # make it grayscale
    im_gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
    if method == 'fixed':
        threshed_im = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY)
    elif method == 'mean':
        threshed_im = cv2.adaptiveThreshold(im_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 10)
    elif method == 'gaussian':
        threshed_im = cv2.adaptiveThreshold(im_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 7)
    else:
        return None
    return threshed_im

image = cv2.imread('demo4.jpg')
# threshold it
thresh = threshold(image, 'mean')
# find contours
_, cnts, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print len(cnts)
cv2.drawContours(image, cnts, -1, (0, 255, 0), 20)
cv2.imshow('contours', image)
cv2.waitKey()
cv2.drawContours(thresh, cnts, -1, (0, 255, 0), 20)
cv2.imshow('contours', thresh)
cv2.waitKey()

'

您只得到最外层的轮廓,因为您指定了cv2.RETR_EXTERNAL。要获取图像的所有轮廓,您应该像这样调用该方法:

cv2.findContours(thresh.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

查看 OpenCV 文档以了解该函数的工作原理。

相关内容

  • 没有找到相关文章

最新更新