Jey*_*mar 3 opencv image-processing python-3.x
我试图使用 opencv 从验证码图像中获取文本。问题是文本被噪音掩盖了,处理这些水平线/噪音很复杂。
原图
我处理的图像:
不知道如何删除那些水平线并获取文本
代码 :
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('captcha.jpg',0)
#display image in window
#cv2.imshow('image',img) #@param - windowname, image to be displayed
horizontal_inv = cv2.bitwise_not(img)
#perform bitwise_and to mask the lines with provided mask
masked_img = cv2.bitwise_and(img, img, mask=horizontal_inv)
#reverse the image back to normal
masked_img_inv = cv2.bitwise_not(masked_img)
cv2.imshow("masked img", masked_img_inv)
cv2.imwrite("result2.jpg", masked_img_inv)
cv2.waitKey(0) # time for window to show image in milliseconds - 0 is infinite wait
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
编辑:如何处理浅色文本
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('captcha.jpg',0)
#display image in window
#cv2.imshow('image',img) #@param - windowname, image to be displayed
horizontal_inv = cv2.bitwise_not(img)
#perform bitwise_and to mask the lines with provided mask
masked_img = cv2.bitwise_and(img, img, mask=horizontal_inv)
#reverse the image back to normal
masked_img_inv = cv2.bitwise_not(masked_img)
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(masked_img_inv,kernel,iterations = 3) # to remove blackline noise
cv2.imwrite("result1.jpg", dilation)
Run Code Online (Sandbox Code Playgroud)
ret,thresh2 = cv2.threshold(dilation,254,255,cv2.THRESH_BINARY_INV)
thresh2=cv2.bitwise_not(thresh2)
# cv2.imshow("masked img", masked_img_inv)
cv2.imwrite("result2.jpg", thresh2)
Run Code Online (Sandbox Code Playgroud)
cv2.waitKey(0) # time for window to show image in milliseconds - 0 is infinite wait
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
如果您将来有任何疑问,请告诉我。