我想删除包含文本的图像的背景,使其在白色背景上的文本。
图像样本
到目前为止,我已经尝试过获得图像的HSV和上下限,但我找不到可以消除所有背景效果的上下限
到目前为止使用的代码:
import cv2
import numpy as np
# Take each frame
filename = 'img2.png'
img = cv2.imread(filename, 1)
# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# Threshold the HSV image to get only blue colors
image_final = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(img,img, mask= mask)
cv2.imshow('frame',img)
cv2.imwrite('mask.png',image_final)
cv2.waitKey(0)
有没有更好的方法,或者我必须结合多个下限和上限才能达到我的目标?
发布于 2018-06-09 06:49:42
您可以将图像读取为灰度并设置treshold:
import cv2
img = cv2.imread('img2.png', 0) # 0 means grayscale
new_img = (img >= 230)*255 # 230 is the threshold, change as desired
cv2.imwrite('mask.png',new_img)
这会将左边的图片转换成右边的图片:
由于您的图片都是纯白色字母,您可能只需要选择一个相当高的常量阈值(因为0表示黑色,255表示白色),例如230。
编辑
@Ishara Madhawa有一个非常好的想法,使用内核来消除中心条纹。但是,如果改用cv2.morphologyEx
,则不会更改字母的粗细:
import cv2
img = cv2.imread('img2.png', 0)
new_img = ((img >= 230)*255).astype('uint8')
cv2.imwrite('mask.png',255-new_img) # 255-... to get black on white
kernel = np.ones((5, 1), np.uint8)
new_img2 = cv2.morphologyEx(new_img, cv2.MORPH_CLOSE, kernel)
cv2.imwrite('mask2.png',255-new_img2)
https://stackoverflow.com/questions/50768295
复制相似问题