在imag中测量扑克牌的高度

2024-06-16 10:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个赌场监控软件的模块。在

一点背景:

我有几个从不同时间提取的视频图像。我有一个参考牌组总是在一个固定的位置,我知道它的大小。假设畸变、相机焦距和距离未知(这将是一个商业销售的软件包,因此这些参数未知)。在

目前工作:

我已经应用了canny边缘检测和houghlines来获得两个组的像素高度。另外,前面甲板所有角的坐标也是已知的,因为它总是处于同一方向的固定位置。在

当参考牌组与我要测量的牌组不在同一距离,但离相机更近时,问题就开始了。在这种情况下,由于其中一个牌组离相机更近,所以两个牌组可能看起来具有相同的像素高度,尽管后面的一个包含更多的卡。在

下面是一个可视化示例:

实际上,两副牌都有52张牌,但靠近相机的那张牌有83像素,而后面的那张牌则有63像素。在

Sample Photo

如何规范化我所拥有的值以引用背景中的牌组?我发现了一个问题,它在图像中移动时会做类似于计算大小的事情,但是这使用的是openGL,我不太熟悉(How do I reverse-project 2D points into 3D?)。我正在尝试使用Python中的计算机视觉/图像处理库(我目前使用ImageMagick来处理canny edge和hough线)来实现这一点(如果您认为Python不合适,我愿意接受使用另一种编程语言的建议)。在

编辑:

总结一下我要达到的目标:我想知道这两个物体在高度上的比较。我如何将后面的那一个缩放到前面那一个旁边的尺寸,这样我就可以比较两者了?在


Tags: 模块图像距离参数视频高度软件时间
2条回答

我不熟悉ImageMagick,所以我不能为您编写代码,但我解释了您要做的事情:

有一点我们可以肯定的是:每张牌的实际尺寸!您知道所有的牌都有相同的宽度和高度(在现实世界中),所以您只需要在图像的第一个堆栈和第二个堆栈上找到上面一张牌的宽度。因为这两个数字是相互关联的,现在可以得到甲板1和甲板2周围尺寸的比率。在

有了这些比率,你可以规范化甲板的高度,并相互比较这些数字。在

例如,考虑每张卡的宽度(红色箭头)为5厘米,而图像中第一组的宽度为80像素,第二组为40像素。所以比率是2。现在要比较这些黑线,只需将第二行的长度乘以2,然后将结果数与第一行的长度进行比较。在

enter image description here

你有很多方法来估计每副牌的宽度。提取宽度可能很困难,因此我建议比较图案的宽度(黄色箭头),为此,我将采用以下方法:

1- Do a canny on image (because of the drawings on the card, you will have lots of line on the surface of the card)

2- Do a dilation to stick all those lines of drawing on the surface of the card and make a unit object

3- Do an erosion to shrink that object a little, and then catch the width of that object (this would be a good estimation of the width of the card)

我想,你应该比较一下你的参考牌组和你的目标牌组的面积。
但首先你应该计算参考和目标甲板的距离。
如果你的数据集有标签或者你的问题是监督。
我想,如果你使用神经网络,你可以设置两个甲板的距离作为偏差值。
另外,我认为,你应该计算两个组的两个最近像素的距离作为两个组的距离。在

相关问题 更多 >