我有申请表的图像,我只想提取被文本框包围的名称,DOB,签名和刻度文本框,但是我得到的结果以及其他意外结果。
输入图像:
预期结果:
我的结果:
我尝试了以下代码
isstrprop(str,'digit')
我怎么只能得到预期的结果?
我有申请表的图像,我只想提取被文本框包围的名称,DOB,签名和刻度文本框,但是我得到的结果以及其他意外结果。
答案 0 :(得分:2)
要提取所需区域,我们可以使用矩形框的属性,因为可以使用轮廓逼近和轮廓区域将它们隔离。这是一种方法:
在这里,检测到的矩形文本框以绿色突出显示
由于具有边界框,因此我们只需提取ROI
import cv2
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blur,0,255,cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
cnts = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
ROI_number = 0
for c in cnts:
area = cv2.contourArea(c)
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
x,y,w,h = cv2.boundingRect(approx)
if len(approx) == 4 and (area > 1000) and (area < 80000):
ROI = image[y:y+h, x:x+w]
cv2.imwrite('ROI_{}.png'.format(ROI_number), ROI)
ROI_number += 1
cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.waitKey()