python cv2 从 skin-mask 3d 阵列图像中弹出黑色
python cv2 eject black color from skin-mask 3d array image
从人脸图像中,我得到了一个带有 cv2 的图像蒙版,正如我发现的 here
结果是由像素(RGB)组成的数组(图像)
问题是结果图片中有很多不属于皮肤的黑色像素。
我想得到非黑色像素的二维数组 [[218,195,182]。 ... [229,0, 133]] - 只有面部肤色的像素
我尝试通过查找所有 RGB 等于 0 的所有像素来弹出黑色像素 仅像 [0,0,0]:
请注意,我不想从以下像素中提取零:[255,0,125] [0,0,255] 等等。
def eject_black_color(skin):
list=[]
#loop over pixels of skin-image
for i in range(skin.shape[0]):
for j in range(skin.shape[1]):
if(not (skin[i][j][0]==0 and skin[i][j][1]==0 and skin[i][j][2]==0)):
#add only non-black pixels to list
list.append(skin[i][j])
return list
如何编写更高效快捷?
谢谢
如果这些值为零,则它们基本上不会影响矩阵乘法中的图像。但是如果你想显示没有黑色像素的图像,你可以添加一个 alpha 蒙版并使这些像素透明。
def make_transparent(img):
tmp = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,alpha = cv2.threshold(tmp,0,255,cv2.THRESH_BINARY)
b, g, r = cv2.split(img)
rgba = [b,g,r, alpha]
dst = cv2.merge(rgba,4)
return dst
编辑:如果你想找到非黑色像素,你可以使用 numpy 的 nonzero
方法。
desired_pixels = img[img.nonzero()]
我以不同的方式问了这个问题,得到了很好的答案。
祝你好运!
从人脸图像中,我得到了一个带有 cv2 的图像蒙版,正如我发现的 here
结果是由像素(RGB)组成的数组(图像)
问题是结果图片中有很多不属于皮肤的黑色像素。
我想得到非黑色像素的二维数组 [[218,195,182]。 ... [229,0, 133]] - 只有面部肤色的像素
我尝试通过查找所有 RGB 等于 0 的所有像素来弹出黑色像素 仅像 [0,0,0]:
请注意,我不想从以下像素中提取零:[255,0,125] [0,0,255] 等等。
def eject_black_color(skin):
list=[]
#loop over pixels of skin-image
for i in range(skin.shape[0]):
for j in range(skin.shape[1]):
if(not (skin[i][j][0]==0 and skin[i][j][1]==0 and skin[i][j][2]==0)):
#add only non-black pixels to list
list.append(skin[i][j])
return list
如何编写更高效快捷?
谢谢
如果这些值为零,则它们基本上不会影响矩阵乘法中的图像。但是如果你想显示没有黑色像素的图像,你可以添加一个 alpha 蒙版并使这些像素透明。
def make_transparent(img):
tmp = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,alpha = cv2.threshold(tmp,0,255,cv2.THRESH_BINARY)
b, g, r = cv2.split(img)
rgba = [b,g,r, alpha]
dst = cv2.merge(rgba,4)
return dst
编辑:如果你想找到非黑色像素,你可以使用 numpy 的 nonzero
方法。
desired_pixels = img[img.nonzero()]
我以不同的方式问了这个问题
祝你好运!