Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从图像中删除绿色屏幕_Python_Opencv - Fatal编程技术网

Python 从图像中删除绿色屏幕

Python 从图像中删除绿色屏幕,python,opencv,Python,Opencv,下面是我的图片: 如您所见,图像中有一些嘈杂的绿色轮廓。到目前为止,这是我使用OpenCV和Python的最新输出。我还是个初学者,所以我需要你的帮助 假设我要创建一个全新的脚本,并输入此图像并“清理”图像,我将如何做 编辑: 这是原始图像: 在图像上使用。然后根据它的外观使用(cv.deflate())使边缘更厚一些。然后移除图像绿色通道的边缘或降低绿色通道的亮度。或者使像素透明 说明了以下方法: 1.)将绿色像素转换为透明度。基本上在HSV颜色空间中使用过滤规则 2.)在头发和一些边界像素

下面是我的图片:

如您所见,图像中有一些嘈杂的绿色轮廓。到目前为止,这是我使用OpenCV和Python的最新输出。我还是个初学者,所以我需要你的帮助

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

编辑: 这是原始图像: 在图像上使用。然后根据它的外观使用(
cv.deflate()
)使边缘更厚一些。然后移除图像绿色通道的边缘或降低绿色通道的亮度。或者使像素透明

说明了以下方法:

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

2.)在头发和一些边界像素上,颜色与绿色混合。为了减少这个问题,这些像素被过滤和平衡,以减少它们的绿色比例


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

尝试创建自定义阈值,如:

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)

嗨,乔,谢谢你的帮助。我想知道,如果我再次拥有原始的绿色图像并“正确”处理它会更好吗(即,不是我这样做的方式,这导致了我在上面分享的图像)?我分享了上面的原始图片,这似乎是同一个问题:是的,我已经看到了那个帖子。不幸的是,除了Java解决方案,没有真正的答案,我对Java不太熟悉。那里描述的方法可能更好,他只在通道上工作,根本没有边缘。在那里描述的所有操作都可以在OpenCV中使用。它只是通过颜色选择像素并使其透明。带绿色的部分是在对象边界的内部还是外部?依我看,物体表面可能有绿光反射。e、 脸上看起来像是反光,手指上看起来更像是坏面具上的绿色
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))