Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于python的药丸刻印检测_Python_Opencv_Image Processing_Python Tesseract - Fatal编程技术网

基于python的药丸刻印检测

基于python的药丸刻印检测,python,opencv,image-processing,python-tesseract,Python,Opencv,Image Processing,Python Tesseract,我正在尝试代码中提到的一些图像处理,但无法获得pytesseract可以检测到的图像。 请帮忙,是否有任何工作做,以检测雕刻 请注意:这只是初学者的代码。您可以随意使用它,而且它还涉及大量的threshold值,您需要对这些值进行实验。当然,这不是最好的代码,但您可以将其用作起点 我将简要概述以下步骤,然后提供python代码以及它在每个步骤生成的输出 加载灰度图像 使用较大的内核大小执行自适应阈值。它是 重要的是要执行自适应阈值,而不是某些全局阈值 阈值,因为它考虑了相邻的强度 在您提供的示

我正在尝试代码中提到的一些图像处理,但无法获得pytesseract可以检测到的图像。
请帮忙,是否有任何工作做,以检测雕刻


请注意:这只是初学者的代码。您可以随意使用它,而且它还涉及大量的
threshold
值,您需要对这些值进行实验。当然,这不是最好的代码,但您可以将其用作起点

我将简要概述以下步骤,然后提供
python
代码以及它在每个步骤生成的
输出

  • 加载灰度图像
  • 使用较大的
    内核大小执行自适应阈值。它是
    重要的是要执行自适应阈值,而不是某些全局阈值
    阈值,因为它考虑了相邻的强度
    在您提供的示例图像中扮演重要角色
  • 执行中值模糊以消除椒盐噪声
  • 找到面积较大的连接部件,然后拆下 来自最终图像的小岛噪声
  • 将最终轮廓绘制到输出图像中
下面提供了实现这一点的
python
代码:

导入cv2
将numpy作为np导入
image=cv2.imread('test.png')
输出=np.0((image.shape[0],image.shape[1],3),np.uint8)
灰色=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY)
阈值=cv2。自适应阈值(灰色,255,cv2。自适应阈值平均值,cv2。阈值二进制,11,1)
中位数=cv2.medianBlur(阈值,11)
中位数=cv2。按位_非(中位数)
im2,等高线,层次=cv2.找到的等高线(中间带,cv2.重建树,cv2.链约无)
已保存的内容=[]
thresh=100
对于等高线中的等高线:
如果cv2.轮廓面积(轮廓)>阈值:
打印(cv2.轮廓面积(轮廓))
已保存的\u cont.append(等高线)
cv2.绘制轮廓(输出,保存的控制,-1,(255255),1)
cv2.imshow(“原始”,灰色)
cv2.imshow(“阈值”,阈值)
cv2.imshow(“中位数”,中位数)
cv2.imshow(“轮廓”,输出)
cv2.imwrite(“threshold.png”,threshold)
cv2.imwrite(“median.png”,median)
cv2.imwrite(“output.png”,output)
cv2.等待键(0)
cv2.destroyAllWindows()
原始图像:

阈值图像:

中值模糊图像:

最终输出:


您可能要尝试的其他一些形态学操作包括扩张侵蚀打开关闭操作。文档可以在上面找到。

请注意:这只是初学者的代码。您可以随意使用它,而且它还涉及大量的
threshold
值,您需要对这些值进行实验。当然,这不是最好的代码,但您可以将其用作起点

我将简要概述以下步骤,然后提供
python
代码以及它在每个步骤生成的
输出

  • 加载灰度图像
  • 使用较大的
    内核大小执行自适应阈值。它是
    重要的是要执行自适应阈值,而不是某些全局阈值
    阈值,因为它考虑了相邻的强度
    在您提供的示例图像中扮演重要角色
  • 执行中值模糊以消除椒盐噪声
  • 找到面积较大的连接部件,然后拆下 来自最终图像的小岛噪声
  • 将最终轮廓绘制到输出图像中
下面提供了实现这一点的
python
代码:

导入cv2
将numpy作为np导入
image=cv2.imread('test.png')
输出=np.0((image.shape[0],image.shape[1],3),np.uint8)
灰色=cv2.CVT颜色(图像,cv2.COLOR\u BGR2GRAY)
阈值=cv2。自适应阈值(灰色,255,cv2。自适应阈值平均值,cv2。阈值二进制,11,1)
中位数=cv2.medianBlur(阈值,11)
中位数=cv2。按位_非(中位数)
im2,等高线,层次=cv2.找到的等高线(中间带,cv2.重建树,cv2.链约无)
已保存的内容=[]
thresh=100
对于等高线中的等高线:
如果cv2.轮廓面积(轮廓)>阈值:
打印(cv2.轮廓面积(轮廓))
已保存的\u cont.append(等高线)
cv2.绘制轮廓(输出,保存的控制,-1,(255255),1)
cv2.imshow(“原始”,灰色)
cv2.imshow(“阈值”,阈值)
cv2.imshow(“中位数”,中位数)
cv2.imshow(“轮廓”,输出)
cv2.imwrite(“threshold.png”,threshold)
cv2.imwrite(“median.png”,median)
cv2.imwrite(“output.png”,output)
cv2.等待键(0)
cv2.destroyAllWindows()
原始图像:

阈值图像:

中值模糊图像:

最终输出:


您可能要尝试的其他一些形态学操作包括扩张侵蚀打开关闭操作。文档可以在上找到。

这是一个典型的工业应用

设置所需的是正确的照明: 下面是对它的解释。只要有一点创意,你就可以在家里制作一个原型,比如,用一个LED条纹

使用灰色形态学,您可以加强暗区域,以便更容易地分割雕刻的字母

如果您下载HALCON的测试版本,并在HALCON IDE HDevelop中向制药行业和OCR执行示例,那么最好的学习方法就是如何做到这一点。在这些示例中,您可以学习如何使用徽标匹配来获得药丸的方向。然后,您可以将图像转换为水平方向以进行分割和执行OCR。如果没有任何徽标,请使用压印作为基于形状匹配的模型,然后变换图像,使字母水平定向,然后分割字母并执行OCR。 没有通用配方,每种应用都是独一无二的。但是你可以从例子中学到很多东西来构建你自己的应用程序
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.imshow("img", gray)
# gray = cv2.threshold(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.threshold(gray,110,255,cv2.THRESH_BINARY)
kernel = np.ones((4,4),np.uint8)
gray = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
gray = cv2.dilate(gray,kernel,iterations = 1)
# gray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)\
# gray = cv2.erode(gray,kernel,iterations = 1)
gray = cv2.bitwise_not(gray)
cv2.imshow("threshold", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
# gray = cv2.medianBlur(gray, 3)
text = pytesseract.image_to_string(gray)
print(text)