检测图像上的文字&计算使用OpenCv的区域

时间:2017-06-07 21:20:42

标签: python opencv image-processing text

我想检测文本块在图像上使用的区域的百分比。我们的想法是拒绝文本超过40%的图像。我在检测文本here时看到了一篇非常翔实和详细的文章。该链接使用了C ++。我想我可以在python中使用它。

但是,我不确定什么是衡量其使用面积百分比的最佳方法。我们可以使用类似的东西吗?我刚刚开始使用Cv。

我使用python获取如下文字。这是我发现在线论坛上工作的代码。

import cv2

def captch_ex(file_name):
    img = cv2.imread(file_name)
    img_final = cv2.imread(file_name)
    img2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, mask = cv2.threshold(img2gray, 180, 255, cv2.THRESH_BINARY)
    image_final = cv2.bitwise_and(img2gray, img2gray, mask=mask)
    ret, new_img = cv2.threshold(image_final, 180, 255, cv2.THRESH_BINARY) 



    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3)) 
    dilated = cv2.dilate(new_img, kernel, iterations=9)  

    contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

    for contour in contours:

        [x, y, w, h] = cv2.boundingRect(contour)


        if w < 35 and h < 35:
            continue

        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 2)


    cv2.imshow('captcha_result', img)
    cv2.waitKey()

file_name = 'my_image.jpg'
captch_ex(file_name)

但是,我该如何进一步处理?

1 个答案:

答案 0 :(得分:0)

一个很好的起点是

  1. 计算边界框的总面积(w * h)。这对应于用文本覆盖的图像的总面积。

  2. 将其与图像中的总像素数进行比较(行*列)

  3. 请注意,此值不准确,因为可能有不同的字体大小和行间距。要确定40%的图像被文本覆盖的确切边距,您应该通过挑选几个图像来找到阈值,其中大约40%的图像覆盖文本,高于和低于该数量,由人类识别。