Opencv在图像上绘制黑色像素

Posted

技术标签:

【中文标题】Opencv在图像上绘制黑色像素【英文标题】:Opencv plot black pixels on a image 【发布时间】:2019-07-25 11:19:50 【问题描述】:

我有一个类似于

的输入图像

我指的是: How to fill the gaps in letters after Canny edge detection

我想在这张图片上绘制黑色像素。上述网址上提出的解决方案是首先使用

找到所有黑色像素
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 中的数据)。

【问题讨论】:

“绘制黑色像素”是什么意思?是否要在提取黑色像素后显示它们的直方图? 不,我想要 cv2.imwrite('output.jpg', image)。其中图像仅突出显示上图中的语言。我想突出显示字母并从图像中删除背景 你链接的问题已经做到了。 以上链接中的建议解决方案找到所有三个通道均低于 100 的所有像素。我想用这些新定义的低于 100 的值绘制图像 【参考方案1】:

在答案中指出np.all(image&lt;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()

【讨论】:

我为我正在从事的项目找到了这个答案。我正在尝试做类似的事情。虽然我不想提取灰色,但我只想要黑色。当我使用它时,它会从我的图像中提取很多背景。我一直在搞砸 upper_val 数字,但无法正确处理。上/下 vals 必须是什么才能只拉出真正的黑色,然后我可以尝试从那里开始工作。 upper_val 数字是 [Hue, Saturation, Value]。正如您在this 图像中看到的那样,您需要所有色调、所有饱和度和阈值。较低 = 较暗。您可以使用 this script 测试图像上的值 如果用真正的黑色表示#000000,我建议使用binary threshold

以上是关于Opencv在图像上绘制黑色像素的主要内容,如果未能解决你的问题,请参考以下文章

将灰度图像中的像素转换为黑色(OpenCV)会导致意外结果?

在 OpenCV python 中将白色像素转换为黑色

OpenCV在轮廓边界内获取黑色像素

使用Python,OpenCV对图像进行亚像素点检测,并拟合椭圆进行绘制

opencv如何读取多边形区域内的像素值?

如何使用带有c ++的opencv库将下图中的黑色像素更改为红色像素