Python 如何去噪图像
我正在构建一个应用程序来识别一些图片。下面是一个例子: 下面是我用来转换图片的代码:Python 如何去噪图像,python,opencv,ocr,Python,Opencv,Ocr,我正在构建一个应用程序来识别一些图片。下面是一个例子: 下面是我用来转换图片的代码: img = cv2.imread('9jxs.png', 0) ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) plt.figure() plt.subplot(221), plt.imsho
img = cv2.imread('9jxs.png', 0)
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
plt.figure()
plt.subplot(221), plt.imshow(img, 'gray')
plt.show()
显然,图片的结果是“9JXS”,我的问题是如何删除噪声像素,清理图片,然后我可以使用OCR组件识别这种特殊类型的图片,与图片的其余部分相比,线条似乎要暗得多。我会找到图片的
min()。
您可以尝试手动调整范围选择的参数,并结合一些侵蚀,但我想对于一般情况,这将很难自动化
import cv2 as cv
import numpy as np
def on_lb_trackbar(val):
global lb
lb = val
cv.imshow(title, cv.erode(cv.inRange(img,lb,ub),erosion_kernel))
def on_ub_trackbar(val):
global ub
ub = val
cv.imshow(title, cv.erode(cv.inRange(img,lb,ub),erosion_kernel))
img = cv.imread(r'udilN.png',cv.IMREAD_GRAYSCALE)
lb = 0
ub = 255
title = 'Range selection'
erosion_kernel = np.ones((5,3), np.uint8)
cv.namedWindow(title)
cv.createTrackbar('from', title , lb, 255, on_lb_trackbar)
cv.createTrackbar('to', title , ub, 255, on_ub_trackbar)
on_lb_trackbar(0)
这是一个聪明的方法。如果不进行测试,我担心这会使X难以辨认ocr@MadPhysicist“不要害怕!”(c)=)也许可以制作一个图像的直方图,然后放弃所有内容,但中间的peakI认为这个问题太笼统了。有很多选择可以实现你所需要的。作为第一种方法:您可以尝试更改此行中的阈值ret1,th1=cv2.threshold(img,127255,cv2.THRESH\u BINARY)
以将其调整为文本/噪声值。虽然每次可能都会有不同的声音。如果它们总是较暗,您可以检测它们,计算轮廓,然后将其从原始图像中删除。可能重复Hi,Stef,谢谢您的回复!图片非常接近最终结果,我尝试了数字57和198,但无法得到相同的结果,我们使用的图片是相同的吗?是的,这是您在问题中发布的图片,我只是手动剪切它以删除轴并将其重新保存到原始png文件中。是裁剪前的原始版本。