gpt4 book ai didi

python - 如何在OPENCV python中从图像中删除背景灰色图纸

转载 作者:行者123 更新时间:2023-12-02 17:00:55 31 4
gpt4 key购买 nike

我需要从图像背景中删除灰色图形,只需要在其上绘制符号。

这是我的代码使用morphologyEx来执行此操作,但没有删除背景中的整个灰色图形。

img_path = "images/new_drawing.png"
img = cv2.imread(img_path)

kernel = np.ones((2,2), dtype=np.uint8)
result = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=1)
cv2.imshow('Without background',result);

cv2.waitKey(0)
cv2.destroyAllWindows()


我也尝试过此操作,并获得了预期的灰度结果,但无法将其转换为BGR。

这是我的代码
img = cv2.imread('images/new_drawing.png')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
med_blur = cv2.medianBlur(gray_img, ksize=3)

_, thresh = cv2.threshold(med_blur, 190, 255, cv2.THRESH_BINARY)
blending = cv2.addWeighted(gray_img, 0.5, thresh, 0.9, gamma=0)
cv2.imshow("blending", blending);


我也用轮廓来识别符号并将其绘制为白色图像,但问题是它也可以识别我不想要的背景图。

输入图像

enter image description here

预期的输出图像

enter image description here

此外,绘图将始终为灰色,如图像中所示。

请帮助我以获得更好的结果。

最佳答案

你快到了...

我建议不要使用cv2.inRange来“捕获”非灰色像素,而是建议使用cv2.inRange来捕获要更改为白色的所有像素:

mask = cv2.inRange(hsv, (0, 0, 100), (255, 5, 255))
  • 色相范围无关。
  • 饱和度接近零(灰色阴影)。
  • 亮度不包括黑色像素(您希望保留)。

  • 为了获得更好的解决方案,我还使用了以下附加步骤:
  • 构建非黑色像素的蒙版:
    nzmask = cv2.inRange(hsv, (0, 0, 5), (255, 255, 255))
  • 腐 eclipse 上面的面具:
    nzmask = cv2.erode(nzmask, np.ones((3,3)))
  • andmask之间应用nzmask操作:
    mask = mask & nzmask

  • 以上阶段将黑色像素周围的灰色像素保留。
    没有上述阶段,黑色文本会变稀。
  • 最后一步是用白色替换mask像素:
    new_img = img.copy()
    new_img[np.where(mask)] = 255


  • 这是代码:
    import numpy as np
    import cv2

    img_path = "new_drawing.png"
    img = cv2.imread(img_path)

    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    mask = cv2.inRange(hsv, (0, 0, 100), (255, 5, 255))
    cv2.imshow('mask before and with nzmask', mask);

    # Build mask of non black pixels.
    nzmask = cv2.inRange(hsv, (0, 0, 5), (255, 255, 255))

    # Erode the mask - all pixels around a black pixels should not be masked.
    nzmask = cv2.erode(nzmask, np.ones((3,3)))
    cv2.imshow('nzmask', nzmask);

    mask = mask & nzmask

    new_img = img.copy()
    new_img[np.where(mask)] = 255

    cv2.imshow('mask', mask);
    cv2.imshow('new_img', new_img);
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    结果:
    enter image description here

    关于python - 如何在OPENCV python中从图像中删除背景灰色图纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61223862/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com