首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenCV :文本处理和噪声去除

OpenCV :文本处理和噪声去除
EN

Stack Overflow用户
提问于 2018-06-09 04:56:06
回答 1查看 3K关注 0票数 1

我想删除包含文本的图像的背景,使其在白色背景上的文本。

图像样本

到目前为止,我已经尝试过获得图像的HSV和上下限,但我找不到可以消除所有背景效果的上下限

到目前为止使用的代码:

代码语言:javascript
复制
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)

有没有更好的方法,或者我必须结合多个下限和上限才能达到我的目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 06:49:42

您可以将图像读取为灰度并设置treshold:

代码语言:javascript
复制
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,则不会更改字母的粗细:

代码语言:javascript
复制
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)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档