2012-06-09 61 views
11

Thường trong quá trình OCR, một tệp hình ảnh về cơ bản được cắt thành các phân đoạn và mỗi ký tự được xem là một phân đoạn. Ví dụ, Unsegmented text as imageLàm cách nào để chuyển đổi hình ảnh thành các phân đoạn ký tự?

phải được chuyển thành một cái gì đó giống như Image in which text has been segmented and is ready for OCR

Ngoài ra, là có bất kỳ thuật toán cho các ngôn ngữ châu Á như Telugu sẵn cho mục đích này? Nếu không, làm thế nào là điều này được thực hiện cho tiếng Anh?

Trả lời

36

Có thể dễ dàng thực hiện bằng cách sử dụng OpenCV. Dưới đây là một số mẫu mã:

import cv2 
import numpy as np 

# Load the image 
img = cv2.imread('sof.png') 

# convert to grayscale 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

# smooth the image to avoid noises 
gray = cv2.medianBlur(gray,5) 

# Apply adaptive threshold 
thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2) 
thresh_color = cv2.cvtColor(thresh,cv2.COLOR_GRAY2BGR) 

# apply some dilation and erosion to join the gaps 
thresh = cv2.dilate(thresh,None,iterations = 3) 
thresh = cv2.erode(thresh,None,iterations = 2) 

# Find the contours 
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

# For each contour, find the bounding rectangle and draw it 
for cnt in contours: 
    x,y,w,h = cv2.boundingRect(cnt) 
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) 
    cv2.rectangle(thresh_color,(x,y),(x+w,y+h),(0,255,0),2) 

# Finally show the image 
cv2.imshow('img',img) 
cv2.imshow('res',thresh_color) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Output sẽ trông giống như dưới đây:

enter image description hereenter image description here

+4

+1 câu trả lời tuyệt vời nhưng tôi nghĩ rằng nó có thể sử dụng một số ý kiến ​​tại mỗi bước (đặc biệt là kể từ khi OP đã không đề cập OpenCV trong câu hỏi của mình) – Amro

+1

@Amro: đã thêm nhận xét –

Các vấn đề liên quan