- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图用 python 编写与此处所写相同的代码,但我的代码没有产生好的结果。我的目标是获取 RGB 图像,调整大小并转换为 YCbCr,然后将背景像素值设置为 0,将手部像素值设置为 1。有人可以帮我使用 PIL 在 Python 中编写这段代码吗?
(我正在尝试复制的代码,我在执行步骤 3-6 时遇到了一些问题)
function image_out = processSkinImage(filename)
Step 1...
% Read the image
original = imread(filename);
...
Step 2...
% Resize the image to 50x50
image_resized = imresize(original, scale);
[M N Z] = size(image_resized);
% Initialize the output image
image_out = zeros(height,width);
image_out = zeros(M,N);
...
Step 3...
% Convert the image from RGB to YCbCr
img_ycbcr = rgb2ycbcr(image_resized);
Cb = img_ycbcr(:,:,2);
Cr = img_ycbcr(:,:,3);
...
Step 4...
% Get the central color of the image
% Expected the hand to be in the central of the image
central_color = img_ycbcr(int32(M/2),int32(N/2),:);
Cb_Color = central_color(:,:,2);
Cr_Color = central_color(:,:,3);
% Set the range
Cb_Difference = 15;
Cr_Difference = 10;
...
Step 5...
% Detect skin pixels
[r,c,v] = find(Cb>=Cb_Color-Cr_Difference & Cb<=Cb_Color+Cb_Difference & Cr>=Cr_Color-Cr_Difference & Cr<=Cr_Color+Cr_Difference);
...
Step 6...
% Mark detected pixels
for i=1:match_count
image_out(r(i),c(i)) = 1;
end
end
这是我写的代码:
from PIL import Image as im
image = im.open('/Users/eitan/Desktop/eell.jpg')
image = image.resize((50,50), im.NEAREST)
grayScale = image.convert(mode='L')
width, height = grayScale.size
mid_pixel=grayScale.getpixel((width/2,height/2))
print (mid_pixel)
pixels = grayScale.load()
for i in range(grayScale.size[0]): # for every col:
for j in range(grayScale.size[1]): # For every row
if grayScale.getpixel((i,j)) < mid_pixel+40 and grayScale.getpixel((i,j)) > mid_pixel-15:
pixels[i,j] = 255
else:
pixels[i, j] = 0
grayScale.show()
This is an example of an image the code would get
And this is what the result should look like
如果有人能帮我用 python 编写这段代码,那就太好了!
最佳答案
您可以这样处理,我使用的是 HSV 色彩空间而不是 YCbCr 色彩空间:
#!/usr/bin/env python3
import numpy as np
from PIL import Image
# Open image and convert to HSV colourspace
im = Image.open('hand.png').convert('HSV')
# Convert to Numpy array
ni = np.array(im)
# Get H, S and V of central pixel - consider taking a median of a larger area here
h,s,v = ni[int(ni.shape[0]/2), int(ni.shape[1]/2)]
# Separate each channel to own array
H = ni[:,:,0]
S = ni[:,:,1]
V = ni[:,:,2]
# Permissible +/- tolerances on each channel
deltah = 20
deltas = 80
deltav = 50
# Make masks of pixels with acceptable H, S and V
hmask = np.where((H > h-deltah) & (H < h+deltah), 255, 0).astype(np.uint8)
smask = np.where((S > s-deltas) & (S < s+deltas), 255, 0).astype(np.uint8)
vmask = np.where((V > v-deltav) & (V < v+deltav), 255, 0).astype(np.uint8)
# Save as images for inspection
Image.fromarray(hmask).save('hmask.png')
Image.fromarray(smask).save('smask.png')
Image.fromarray(vmask).save('vmask.png')
生成的色相 mask :
生成的饱和度蒙版:
结果值掩码:
然后您可以将蒙版与或或组合在一起以获得更复杂的蒙版组合。
关于python - 将RGB图像转换为黑白PIL手部识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051929/
在 firefox 中,链接手形光标显示正常,但在 IE7 中显示文本光标。 如何在所有浏览器的链接上获得相同的光标(手)? 我可以在 CSS 重置中添加一些内容,以便在所有浏览器中的链接上获取光标吗
我试图在表单元素上方显示我的表单标签,所以我在我的 CSS 中使用了 display:block。但是,我无法通过这种方式每行显示超过 1 个表单元素。 如何正确更新我的 CSS 以在表单元素上方显示
我想找到人手的宽度,但卡在手上的洞上。 我有一只手的图片并找到了它的二进制文件。手上有一个圆圈,其半径和中心已知(引用对象)。我想找到手的宽度,但它上面有一些补丁(孔),这阻碍了找到手的最佳宽度。 这
我尝试为一款游戏制作一个机器人,但他们有很酷的反像素机器人技术。 所以我想,“如果我可以制作一个机器人,只检查光标是否变为手形然后单击,它就会起作用,”因为我需要收集奖金盒,当你将光标指向它时,它变为
我尝试为一款游戏制作一个机器人,但他们有很酷的反像素机器人技术。 所以我想,“如果我可以制作一个机器人,只检查光标是否变为手形然后单击,它就会起作用,”因为我需要收集奖金盒,当你将光标指向它时,它变为
所以我有一副牌的代码,但我不知道如何让另一个类来处理 4 手牌,每手 10 张牌。另一类应在屏幕上以文字形式打印 4 手 10 张随机卡片。有人可以向我展示如何完成此任务的代码吗?我也使用 blueJ
我正在尝试通过在开放正方形内插入图标来使用 fontawesome 创建图标。悬停时,我想更改正方形内背景的颜色,以及正方形的实际颜色和图标颜色。 我在这里举了一个例子:http://jsfiddle
当我手动启 Action 业时,我正在寻找设置变量的正确方法。 我试过 : stages: - test my_job: stage: test script: - echo "H
我必须添加以下代码: a {cursor:pointer;} 在 angular-ui-bootstrap 中将光标更改为标签、分页、下拉切换等链接上的指针/手。 为什么默认不改为指针?这是故意的吗?
我是一名优秀的程序员,十分优秀!