2016-10-17 15 views
9

Tôi có hình ảnh hóa đơn và tôi muốn phát hiện văn bản trên đó. Vì vậy, tôi dự định sử dụng 2 bước: đầu tiên là để xác định các khu vực văn bản, và sau đó sử dụng OCR để nhận ra văn bản.OpenCV MSER phát hiện vùng văn bản - Python

Tôi đang sử dụng OpenCV 3.0 trong python cho điều đó. Tôi có thể xác định văn bản (bao gồm một số vùng không phải văn bản) nhưng tôi cũng muốn xác định các hộp văn bản từ hình ảnh (cũng không bao gồm các vùng không phải văn bản).

hình ảnh đầu vào của tôi là: Original và đầu ra là: Processed và tôi đang sử dụng mã dưới đây cho việc này:

img = cv2.imread('/home/mis/Text_Recognition/bill.jpg') 
mser = cv2.MSER_create() 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #Converting to GrayScale 
gray_img = img.copy() 

regions = mser.detectRegions(gray, None) 
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions] 
cv2.polylines(gray_img, hulls, 1, (0, 0, 255), 2) 
cv2.imwrite('/home/mis/Text_Recognition/amit.jpg', gray_img) #Saving 

Bây giờ, tôi muốn xác định các hộp văn bản, và xóa/unidentify bất kỳ phi các khu vực tiếp theo trên hóa đơn. Tôi mới dùng OpenCV và là người mới bắt đầu bằng Python. Tôi có thể tìm thấy một số ví dụ trong MATAB exampleC++ example, nhưng nếu tôi chuyển đổi chúng thành python, nó sẽ mất rất nhiều thời gian cho tôi.

Có ví dụ nào với python sử dụng OpenCV hay bất kỳ ai có thể giúp tôi với điều này?

+0

Hey là bạn có thể hình dung nó ra? – Oer

Trả lời

2

Dưới đây là mã nhập gói

import cv2 
import numpy as np 

#Create MSER object 
mser = cv2.MSER_create() 

#Your image path i-e receipt path 
img = cv2.imread('/home/rafiullah/PycharmProjects/python-ocr-master/receipts/73.jpg') 

#Convert to gray scale 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

vis = img.copy() 

#detect regions in gray scale image 
regions, _ = mser.detectRegions(gray) 

hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions] 

cv2.polylines(vis, hulls, 1, (0, 255, 0)) 

cv2.imshow('img', vis) 

cv2.waitKey(0) 

mask = np.zeros((img.shape[0], img.shape[1], 1), dtype=np.uint8) 

for contour in hulls: 

    cv2.drawContours(mask, [contour], -1, (255, 255, 255), -1) 

#this is used to find only text regions, remaining are ignored 
text_only = cv2.bitwise_and(img, img, mask=mask) 

cv2.imshow("text only", text_only) 

cv2.waitKey(0) 
Các vấn đề liên quan