首先需要将分类好的标签添加进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()
效果图展示:
原图:
检测后的图片:
可以看出,下方的垃圾箱处的小文本没有检测出来,有兴趣的朋友可以一起讨论解决办法。
领取专属 10元无门槛券
私享最新 技术干货