首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

字符检测的python实现

首先需要将分类好的标签添加进python工程

在工程中新建python文件,添加要检测字符的照片

''

Created on 一月 21, 2018

OCR: Optical CharacterRecognition

@author: 朱驰宇

'''

importcv2ascv

importnumpyasnp

img= cv.imread('scenetext01.jpg')

#imGray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#固定阈值二值化

#retval, imThreshold = cv.threshold(imGray, 181, 255, cv.THRESH_BINARY)

#img2=cv.cvtColor(imThreshold,cv.COLOR_GRAY2BGR)

#用于最终显示标出字符矩形框的的图片

vis= img.copy()

# 单独处理每个通道

channels = cv.text.computeNMChannels(img)

# 增加了一个通道,强度梯度通道--(即最亮区域的强度-最暗区域区域的强度)

cn =len(channels)-1

forcinrange(,cn):

channels.append((255-channels[c]))

#从每个独立的通道提取极值区域

print(" 正从"+str(len(channels))+"个通道中提取极值区域 ...")

print(" (...) 可能需要等一会,请您耐心等待 (...)")

#应用opencv contrib自带的分类器

forchannelinchannels:

erc1 = cv.text.loadClassifierNM1('./trained_classifierNM1.xml')

er1 = cv.text.createERFilterNM1(erc1,16,0.00015,0.13,0.2,True,0.1)

erc2 = cv.text.loadClassifierNM2('./trained_classifierNM2.xml')

er2 = cv.text.createERFilterNM2(erc2,0.5)

regions = cv.text.detectRegions(channel,er1,er2)

rects = cv.text.erGrouping(img,channel,[r.tolist()forrinregions])

#用矩形框框出识别出的字符

forrinrange(,np.shape(rects)[]):

rect = rects[r]

cv.rectangle(vis,(rect[],rect[1]),(rect[]+rect[2],rect[1]+rect[3]),(,,),2)

cv.rectangle(vis,(rect[],rect[1]),(rect[]+rect[2],rect[1]+rect[3]),(255,255,255),1)

#展示效果

cv.imshow("Text detection result",vis)

cv.waitKey()

效果图展示:

原图:

检测后的图片:

可以看出,下方的垃圾箱处的小文本没有检测出来,有兴趣的朋友可以一起讨论解决办法。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180121G018BX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券