Python 非均匀背景图像中的字符检测
我试图做字符检测,必须在字符周围画一个框,然后裁剪,然后输入神经网络进行识别。一切正常,但在我使用单色背景图像上的字符集之前,分割很容易完成 然而,对于真实的照片,我有不同的照明条件,真的很难找到轮廓。 在应用了一些自适应阈值后,我成功地获得了以下结果,但从那开始,我真的不知道如何正确地继续并检测每个角色。我可以很容易地发现一半的字符,但不是全部。可能是因为它们被许多不相关的小轮廓所包围。 我觉得还有一步要走,但我不知道是哪一步。 Find Countours只能找到大约一半的字符 简而言之,现在我在做:Python 非均匀背景图像中的字符检测,python,opencv,Python,Opencv,我试图做字符检测,必须在字符周围画一个框,然后裁剪,然后输入神经网络进行识别。一切正常,但在我使用单色背景图像上的字符集之前,分割很容易完成 然而,对于真实的照片,我有不同的照明条件,真的很难找到轮廓。 在应用了一些自适应阈值后,我成功地获得了以下结果,但从那开始,我真的不知道如何正确地继续并检测每个角色。我可以很容易地发现一半的字符,但不是全部。可能是因为它们被许多不相关的小轮廓所包围。 我觉得还有一步要走,但我不知道是哪一步。 Find Countours只能找到大约一半的字符 简而言之,现
im_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
im_gray = cv2.GaussianBlur(im_gray, (5, 5), 0)
_, th1 = cv2.threshold(im_gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cim, ctrs, hier = cv2.findContours(th1.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
及
下图-原始图像和中间结果的一些变化
所以问题是-分割字符的步骤是什么?您可以执行高斯差分。想法是用两个不同的核模糊图像,并减去它们各自的结果: 代码:
im = cv2.imread(img, 0)
#--- it is better to take bigger kernel sizes to remove smaller edges ---
kernel1 = 15
kernel2 = 31
blur1 = cv2.GaussianBlur(im,(kernel1, kernel1), 0)
blur2 = cv2.GaussianBlur(im,(kernel2, kernel2), 0)
cv2.imshow('Difference of Gaussians',blur2 - blur1)
结果:
im = cv2.imread(img, 0)
#--- it is better to take bigger kernel sizes to remove smaller edges ---
kernel1 = 15
kernel2 = 31
blur1 = cv2.GaussianBlur(im,(kernel1, kernel1), 0)
blur2 = cv2.GaussianBlur(im,(kernel2, kernel2), 0)
cv2.imshow('Difference of Gaussians',blur2 - blur1)
您是否尝试过降低噪音。Wiki中有一些可怕的名字,所以请尝试在opencv中搜索特定的技术,以查看结果(例如)。谢谢!实际上我还没试过这个。是的,可怕的名字并不可怕:)太好了,谢谢!这实际上比我所有的研究结果都要好struggles@Alex尝试改变内核的大小,可以看到不同的结果。