import cv2
import pytesseract
from PIL import Image
import numpy as np
# import bm3d
img = cv2.imread('1_2_2.png')
# img = cv2.medianBlur(img, 5)
img = cv2.GaussianBlur(img,(13,13),0)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# gray = cv2.medianBlur(, 5)
# cv2.imsw("img", gray)
# gray = cv2.thresld(gray, 0, 255, cv2.THRESH_BINARY |
cv2.THRESH_OTSU)
[1]
v = np.median(gray)
sigma = 0.33
#---- apply automatic Canny edge detection using the computed median--
--
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
gray = cv2.Canny(img,lower,upper)
# ret,gray = cv2.thresld(gray,110,255,cv2.THRESH_BINARY)
kernel = np.ones((4,4),np.uint8)
gray = cv2.morplogyEx(gray, cv2.MORPH_CLOSE, kernel)
gray = cv2.dilate(gray,kernel,iterations = 1)
# gray = cv2.morplogyEx(gray, cv2.MORPH_OPEN, kernel)\
# gray = cv2.erode(gray,kernel,iterations = 1)
gray = cv2.bitwise_not(gray)
cv2.imsw("thresld", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
# gray = cv2.medianBlur(gray, 3)
text = pytesseract.image_to_string(gray)
print(text)
我正在尝试代码中提到的一些图像处理,但无法获得 pytesseract 可以检测到的图像处理。
请帮助是否有任何工作来检测雕刻
请注意:这只是一个初学者的代码。你可以玩它,它还涉及很多thresld
值,你需要实验。当然这不是最好的代码,但你可以把它作为一个起点。
我将简要概述下面的步骤,并在之后提供pytn
代码以及它在每个步骤生成的output
。
在灰度中加载图像
使用大的kernel size
执行自适应阈值。重要的是执行自适应阈值,而不是某些全局阈值,因为它考虑了相邻强度,这在您提供的示例图像中起着重要作用。
执行中值模糊以消除盐和胡椒噪音。
找到面积相当大的连接组件,并从最终图像中去除小岛噪声。
将最终的轮廓绘制到输出图像中。
下面提供了实现此目的的pytn
代码:
import cv2
import numpy as np
image = cv2.imread('test.png')
output = np.zeros((image.shape[0],image.shape[1],3), np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresld = cv2.adaptiveThresld(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C , cv2.THRESH_BINARY, 11, 1)
median = cv2.medianBlur(thresld, 11)
median = cv2.bitwise_not(median)
im2, contours, hierarchy = cv2.findContours(median,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
saved_cont = []
thresh = 100
for contour in contours:
if cv2.contourArea(contour) > thresh:
print(cv2.contourArea(contour))
saved_cont.append(contour)
cv2.drawContours(output, saved_cont,-1,(255,255,255),1)
cv2.imsw('original', gray)
cv2.imsw('thresld', thresld)
cv2.imsw('median', median)
cv2.imsw('contour', output)
cv2.imwrite("thresld.png", thresld)
cv2.imwrite("median.png", median)
cv2.imwrite("output.png", output)
cv2.waitKey(0)
cv2.destroyAllWindows()
原始图像:
阈值图像:
图像中值模糊:
最终输出:
您可能想要试验的其他一些形态学操作是扩张、侵蚀、打开和关闭操作。可以在here上找到文档。
是典型的工业应用。
您的设置需要的是正确的照明:http://www.vision-doctor.com/en/illumination-techniques/dark-field-illumination.html这是对它的解释。有一点创造力,您可以在家中构建原型,例如使用 LED 条纹。
使用灰色形态,您可以加强黑暗区域,以便于雕刻字母的分割。
最好的学习方法,如何做到这一点,如果你下载 HALCON 的测试版本,并执行的例子,制药行业和 OCR 在 HALCON IDE HDevelop。在例子中,你可以学习如何使用匹配的标志,以获得药丸的方向。然后你可以将图像转换为水平方向进行分割和执行 OCR。如果你没有任何标志,那么使用印记作为基于形状的匹配模型,并水平方向的图像段
最好的问候,多萝西娅
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(28条)