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

OpenCV Python:在图像中查找轮廓/边/矩形,python,opencv,computer-vision,ocr,tesseract,Python,Opencv,Computer Vision,Ocr,Tesseract,我正在使用Python2.7.12和opencv3.0.0-rc1 我正在做一个文本识别项目 这就是我现在得到的。 如您所见,图像包含许多“框”,其中包含文本 我的方法是找到这些框,将它们剪切成单独的图像,然后将它们提供给TesseractOCR 该程序将整个图像视为一个轮廓。 我怎么才能在里面找到那个小的 或者,如果您有其他方法,欢迎使用 代码: import cv2 def threshold(im, method): # make it grayscale im_gr

我正在使用Python2.7.12和opencv3.0.0-rc1

我正在做一个文本识别项目

这就是我现在得到的。

如您所见,图像包含许多“框”,其中包含文本

我的方法是找到这些框,将它们剪切成单独的图像,然后将它们提供给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\u EXTERNAL
,因此只能获得最外层轮廓。要获得图像的所有轮廓,应调用如下方法:

cv2.findContours(thresh.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
看一看函数是如何工作的