我想检测文本块在图像上使用的区域的百分比。我们的想法是拒绝文本超过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)
但是,我该如何进一步处理?
答案 0 :(得分:0)
一个很好的起点是
计算边界框的总面积(w * h)。这对应于用文本覆盖的图像的总面积。
将其与图像中的总像素数进行比较(行*列)
请注意,此值不准确,因为可能有不同的字体大小和行间距。要确定40%的图像被文本覆盖的确切边距,您应该通过挑选几个图像来找到阈值,其中大约40%的图像覆盖文本,高于和低于该数量,由人类识别。