2017-05-25 124 views
3

我想使用mser检测图像中的文本并删除所有非文本区域。使用下面的代码,我是能够检测文本:在Opencv中使用MSER从图像中提取文本python

import cv2 
import sys 


mser = cv2.MSER_create() 
img = cv2.imread('signboard.jpg') 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
vis = img.copy() 
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) 
if cv2.waitKey(0) == 9: 
    cv2.destroyAllWindows() 

如何删除所有非文本区域,并获得与纯文本的二进制图像?我搜索了很多,但找不到任何示例代码来使用python和opencv。

回答

4

您可以使用您找到的轮廓获得二进制图像。只需将填充好的轮廓绘制成白色的空白图像即可。

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) 

注意

text_only = cv2.bitwise_and(img, img, mask=mask) 
更多关于drawContours

然后,您可以用它来只提取文本见the official docs