从图像中删除绿屏

时间:2018-08-07 05:34:52

标签: python opencv

因此,我在下面有这张图片: enter image description here

如您所见,图像中有一些嘈杂的绿色轮廓。到目前为止,这是我在Python中使用OpenCV的最新输出。而且我仍然是初学者,因此需要您的帮助。

假设我要创建一个全新的脚本并提供此图像并“清理”图像,我将如何做?

编辑: 这是原始图像: enter image description here

2 个答案:

答案 0 :(得分:0)

在图像上使用Canny Edge Detection。然后根据外观使用Morphological Dilationcv.dilate())使边缘稍微粗一些。然后从图像的绿色通道中去除边缘或降低绿色通道的亮度。或使像素透明。

This post指出以下方法:

1。)将绿色像素转换为透明度。基本上在HSV颜色空间中使用过滤规则。

2。)在头发和某些边界像素上,颜色与绿色混合在一起。为了减少这个问题,这些像素经过过滤和平衡以降低其绿色比例。

3。)对所有边界像素应用渐变透明度。

答案 1 :(得分:0)

尝试设置自定义阈值,例如:

def color_filter(img, r, g, b):
    colors = [b, g, r]
    result = np.zeros(img.shape, dtype=np.uint8)
    for i in range(3):
        result[:, :, i] = np.where(img[:, :, i] < colors[i], 0, 255)
    return result.astype(np.uint8)

更新:这是另一种解决方案https://codereview.stackexchange.com/a/184059/15056

每个颜色通道都应使用不同的值。

您可以使用找到最佳的配置

def test_colors(img):
    cv.imshow("test_colors", img)
    r = 100
    g = 100
    b = 100
    while True:
        k = chr(cv.waitKey(0))
        if k == 'a':
            r += 1
        elif k == 'q':
            r -= 1
        elif k == 's':
            g += 1
        elif k == 'w':
            g -= 1
        elif k == 'd':
            b += 1
        elif k == 'e':
            b -= 1
        elif k == 't':
            r += 1
            g += 1
            b += 1
        elif k == 'g':
            r -= 1
            g -= 1
            b -= 1
        elif k == 'r':
            r = 100
            g = 100
            b = 100
            cv.imshow("test_colors", img)
            continue
        elif k == 'x':
            cv.destroyAllWindows()   
            print("The RGB is ", (r, g, b))
            break
        else:
            continue
        cv.imshow("test_colors", color_filter(img, r, g, b))