Python 正在尝试将HSV图像转换为黑白[opencv]
我有一个皮肤检测代码,可以很好地将皮肤像素从HSV图像的背景中分离出来 现在,我想把右边的图像转换成黑白。 我的逻辑是检查所有非黑色像素,并将其饱和度值更改为0,强度值更改为255 所以本质上,像素应该是[0-255,0255]。我正在使用python和opencvPython 正在尝试将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
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,然后换成了灰度。