首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手指宽度(计算机视觉)

手指宽度(计算机视觉)
EN

Stack Overflow用户
提问于 2019-05-09 22:11:18
回答 1查看 70关注 0票数 0

我正在尝试计算图像中手指的宽度。我所做的是,我将图像二值化,这给了我白色的手和黑色的背景。

我将y轴固定为: y=156名为thresh的二进制图像

为什么我得不到print (width)的结果?

这个想法是在x轴上循环,在我的例子中我选择了range (x,xD),然后我寻找从黑色到白色和从白色到黑色过渡的索引。

代码语言:javascript
复制
for i in range(x,xD):
    if thresh[i-1][156]==0 and thresh[i][156]==255:
        b2w = i
    if thresh[i-1][156]==255 and thresh[i][156]==0:
        w2b = i
        width = w2b - b2w        
        print(width)
EN

回答 1

Stack Overflow用户

发布于 2019-05-10 21:56:29

你的问题是,除非你的图片中有清晰的起点和终点,否则你的循环将会失败。如果您的手指一直跑到边缘,则永远不会满足thresh[i] == 255 and thresh[i-1] == 0求值为True的条件。在你通过Google Docs共享的数据集中,这正是发生的事情。

有很多方法可以解决这个问题。一种是使用带有异常处理的列表索引方法。如果你在最后,你也可以做一个循环,并检查一下。像numpy和pandas这样的包将会有其他可用的工具。下面是一个代码片段,它显示了如何使用列表索引方法,以及在没有实际边界的情况下遇到行尾的情况:

代码语言:javascript
复制
# lst = [x[156] for x in thresh]  # to actually pull the slice from your data set
# your data pasted from Google Docs
lst = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

# so you can change it to what you want
start = 0
end = len(lst)
# end = 10  # will trigger the first except clause printing finger is not in the slice

try:
    first_255 = lst.index(255, start, end)
    try:
        last_255 = lst.index(0, first_255, end)
    except ValueError:
        last_255 = end
    print(f"width: {last_255 - first_255}")
    print(lst[first_255:last_255])
except ValueError:
    print('finger is not in the slice')
    first_255 = None
    last_255 = None

打印:

代码语言:javascript
复制
>>> width: 408
>>> [255, 255, 255, ... 255, 255]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56061373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档