python-3.x - Opencv在图像上绘制黑色像素
问题描述
我有一个类似于的输入图像
我指的是: Canny边缘检测后如何填补字母的空白
我想在这张图片上绘制黑色像素。上述网址上建议的解决方案是首先使用找到所有黑色像素
import matplotlib.pyplot as pp
import numpy as np
image = pp.imread(r'/home/cris/tmp/Zuv3p.jpg')
bin = np.all(image<100, axis=2)
我的问题是我是否在忽略所有其他颜色通道的同时在图像上绘制这个黑色像素(存储在 bin 中的数据)。
解决方案
在答案中指出,np.all(image<100, axis=2)
用于选择 R、G 和 B 都低于 100 的像素,这基本上是颜色分离。就个人而言,我喜欢为此使用 HSV 色彩空间。
结果:
注意:如果您想改善绿色字母,最好为其创建一个单独的蒙版,并调整绿色的 hsv 值。
代码:
import numpy as np
import cv2
# load image
img = cv2.imread("img.jpg")
# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of black color in HSV
lower_val = np.array([0,0,0])
upper_val = np.array([179,255,127])
# Threshold the HSV image to get only black colors
mask = cv2.inRange(hsv, lower_val, upper_val)
# invert mask to get black symbols on white background
mask_inv = cv2.bitwise_not(mask)
# display image
cv2.imshow("Mask", mask_inv)
cv2.imshow("Img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
推荐阅读
- elasticsearch - 如何对 ElasticSearch 中的聚合字段执行复杂查询
- html - 我怎样才能模糊整个身体而不是唯一的一个div?
- arrays - perl中两个数组的比较
- python - 在区域中找到最后一个字符串后添加新行
- c# - 如何反序列化对 C# 对象的单个属性响应?
- assembly - 如何反转符号扩展?
- java - 当用户单击 JDialog 中的按钮时,如何将输入的数据从 JDialog 传递到父 JFrame?
- javascript - 表格不包含在电子邮件正文中
- reactjs - 如何处理本地存储和 SSR?
- mysql - mysql/mariadb 中的数据库条目连续记录 - 直到今天