新手提问:如何用 Python 识别魔方上不同颜色块的数量?

2019 年 5 月 16 日
 zaxlct

下图由黄,红,绿,蓝方块组成,如何获取每种颜色方块的数量? 如果用 python 来实现的话,有第三方库或思路推荐吗,谢谢

我首先想到了 openCV,如果实在没思路的话,就去 GayHub 找个 python-opencv 的库试试看,考虑到可能会绕圈子,所以在这里问问 pythoner 大佬,感想~

7181 次点击
所在节点    Python
43 条回复
atz
2019 年 5 月 17 日
反正你这每一个格子大小应该都是固定的,用 opencv 查询每个格子中间像素的数值就很好统计
zaxlct
2019 年 5 月 17 日
@atz 每个格子的大小是固定的,图都是美工做的,「用 opencv 查询每个格子中间像素的数值」这个有点难 = =!
U7Q5tLAex2FI0o0g
2019 年 5 月 17 日
简单提供一个思路,不知道符不符合你的要求:
分别针对 4 个颜色,做 cv::threshold、cv::findContours 等操作,得到各个颜色的总面积。后面就可以除以每个色块的面积得到大概的色块数量了
zaxlct
2019 年 5 月 17 日
@littleylv 我试一下
qza1212
2019 年 5 月 17 日
直接通过颜色做阈值分割,分别拿到各种颜色的面积,然后除以单个方块的面积就行了
moodasmood
2019 年 5 月 17 日
细线一定存在?都存在的话按细线切割开就行了呀
minmini
2019 年 5 月 17 日
下午摸鱼写了一下,4 个颜色分别 181 731 14 34 个?
zaxlct
2019 年 5 月 17 日
@minmini 红色我肉眼数了下 37 个
minmini
2019 年 5 月 17 日
@zaxlct 颜色识别有点问题,晚上回去研究一下 HSV
minmini
2019 年 5 月 17 日
@zaxlct 刚刚回家改了改各种颜色的判定范围,没问题了,红色 h 值可以在两个区间,emmmmmm
红色:37
蓝色:14
黄色:178
绿色:731
其他?:0
cz5424
2019 年 5 月 17 日
计算一下间隙距离(从左到右遇到白色块的距离)切割图片,遍历所有小图
zaxlct
2019 年 5 月 17 日
@minmini 我和同事也实现了下,有点误差。你的计算还挺准确的,能提供下思路吗?
minmini
2019 年 5 月 17 日
@zaxlct
先用不同的色彩通道做二值化,然后合并(bitwise_and),再简单的处理一下得到网格的 mask,然后用原图减去网格得到很多小方块。再寻找轮廓就能够得到全部小方块的轮廓,获取每个小方块的中心坐标,再拿着全部坐标到原图(转成 HSV)去取值,最后根据 @necomancer 的方法来判断颜色就好了
zaxlct
2019 年 5 月 17 日
@minmini 谢谢你的回复,我去试试。另外一个不情之请,方便的话能不能提供下部分代码,作为感谢,一本 python 相关的书作为感谢~京东上可以自选,报酬很低,见谅~
minmini
2019 年 5 月 18 日
@zaxlct 可以的,留个邮箱吧
zaxlct
2019 年 5 月 18 日
@minmini
zaxlct@foxmail.com
谢谢,顺便把书的京东链接、收货地址一起发送吧~
minmini
2019 年 5 月 18 日
@zaxlct 已发,请注意查收,有问题直接回邮件就是
vmebeh
2019 年 5 月 18 日
我觉得可以写个拼图的工具
lovestudykid
2019 年 5 月 18 日


学 cv 时候的作业,先用 canny edge detector,再用 hough line detector,然后筛选一下,就可以把每个角点确定下来,然后在每个矩形中间去颜色就行了。不用颜色直方图的原因是你收拍的照片是有 projective distortion 的。
hacunix
2019 年 5 月 18 日
hsv 了解一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/564824

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX