Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 正在尝试将HSV图像转换为黑白[opencv]_Python_Opencv_Pixel_Hsv - Fatal编程技术网

Python 正在尝试将HSV图像转换为黑白[opencv]

Python 正在尝试将HSV图像转换为黑白[opencv],python,opencv,pixel,hsv,Python,Opencv,Pixel,Hsv,我有一个皮肤检测代码,可以很好地将皮肤像素从HSV图像的背景中分离出来 现在,我想把右边的图像转换成黑白。 我的逻辑是检查所有非黑色像素,并将其饱和度值更改为0,强度值更改为255 所以本质上,像素应该是[0-255,0255]。我正在使用python和opencv h,b = skin.shape[:2] for i in xrange(h): for j in xrange(b): # check if it is a non-bl

我有一个皮肤检测代码,可以很好地将皮肤像素从HSV图像的背景中分离出来

现在,我想把右边的图像转换成黑白。 我的逻辑是检查所有非黑色像素,并将其饱和度值更改为0,强度值更改为255

所以本质上,像素应该是[0-255,0255]。我正在使用python和opencv

h,b = skin.shape[:2]    

    for i in xrange(h):
        for j in xrange(b):
            # check if it is a non-black pixel
            if skin[i][j][2]>0:
                # set non-black pixel intensity to full
                skin[i][j][2]=255
                # set saturation zero
                skin[i][j][1]=0
但它产生了这种输出-


如何将那些粉色像素转换为白色?

您基本上是在寻找,基本上概念是选择一个阈值,任何大于阈值的像素值(灰度)都设置为白色和黑色,否则
OpenCV
有一些漂亮的内置方法可以实现同样的功能,但它确实是一个简单的代码:

skin = #Initialize this variable with the image produced after separating the skin pixels from the image.

bw_image = cv2.cvtColor(skin, cv2.HSV2GRAY)

new_image = bw_image[:]

threshold = 1 
 #This value is set to 1 because We want to separate out the pixel values which are purely BLACK whose grayscale value is constant (0) 
现在我们只需在图像上迭代并相应地替换值

h,b = skin.shape[:2]    

for i in xrange(h):
    for j in xrange(b):
        if bw_image[i][j] > threshold:
            new_image[i][j] = 255 #Setting the skin tone to be White
        else:
            new_image[i][j] = 0 #else setting it to zero.

您正在引用
皮肤[i][j][2]
(值)两次-您永远不会更改色调或饱和度。你的代码可能会更清晰一些,比如说,
HUE,SAT,VAL=range(3)
,那么就更难犯这样的错误了。我不知道opencv,但你不应该用
skin[I][j][1]=0
将饱和度设置为0吗?@PM2Ring是的,谢谢。我编辑了那个片段。在我发布之前,我已经更改了我的代码,但忘记了重新检查。查看发布的答案?谢谢!尽管如此,在我的opencv版本(2.4.5)中找不到cv2.HSV2GRAY。所以我换成了BGR,然后换成了灰度。