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

2019-05-16 19:06:15 +08:00
 zaxlct

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

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

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


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

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

https://www.v2ex.com/t/564824

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

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

© 2021 V2EX