【发布时间】:2017-03-02 09:33:23
【问题描述】:
我在 Matlab 中开发了脚本,用于分析颜色窃取上的雕刻文本。我正在使用一系列形态学技术来提取文本并使用 OCR 阅读。我需要在 Raspberry Pi 上实现它,因此我决定将我的 Matlab 代码传输到 OpenCV(在 python 中)。我尝试转移一些方法,它们的工作方式类似,但是如何将 imreconstruct 和 imbinarize(如下所示)实现到 OpenCV? (这里的挑战是适当区分前景和背景)。
也许我应该尝试添加grabCut 或getStructuringElement 或morphologyEx 或dilate?我尝试了各种组合,但没有找到完美的解决方案。
如果有人可以就如何普遍改进 OCR 过程的提取和准确性提出建议,我将把整个脚本都放在上面,我将不胜感激。
基于灰度图像的 bin 值。我改变了一些参数 这些功能:
Matlab:
se = strel('disk', 300);
img = imtophat(img, se);
maker = imerode(img, strel('line',100,0)); %for whiter ones
maker = imerode(img, strel('line',85,0)); %for medium
maker = imerode(img, strel('line',5,0));
imgClear = imreconstruct(maker, img);
imgBlur = imgaussfilt(imgClear,1); %less blur for whiter frames
BW = imbinarize(imgBlur,'adaptive','ForegroundPolarity','Bright',...
'Sensitivity',0.7); %process for medium
BW = imbinarize(imgBlur, 'adaptive', 'ForegroundPolarity',...
'Dark', 'Sensitivity', 0.4); % process for black and white
res = ocr(BW, 'CharacterSet', '0123456789', 'TextLayout', 'Block');
res.Text;
OpenCv
kernel = numpy.ones((5,5),numpy.uint8)
blur = cv2.GaussianBlur(img,(5,5),0)
erosion = cv2.erode(blur,kernel,iterations = 1)
opening = cv2.morphologyEx(erosion, cv2.MORPH_OPEN, kernel)
#bremove = cv2.grabCut(opening,mask,rect,bgdModelmode==GC_INIT_WITH_MASK)
#th3 = cv2.adaptiveThreshold(opening,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU,11,2)
ret, thresh= cv2.threshold(opening,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
ocr = pytesseract.image_to_string(Image.open('image2.png'),config='stdout -c tessedit_char_whitelist=0123456789')
这是输入图像:
【问题讨论】:
标签: python matlab opencv ocr threshold