是否可以检测骰子的上侧?如果从顶部看,这将是一件容易的事,但从许多角度看,可以看到多面。

这是骰子的示例,请随时拍摄自己的照片:
python - 检测骰子的上侧-LMLPHP

您通常想知道您所取得的成绩。我很容易提取所有点,但是如何只提取顶部的点呢?在这种特殊情况下,顶面最大,但这可能并不总是正确的。我正在寻找某种东西来评估顶部正方形(在这种情况下,我可以提取出圆形)相对于底部网格给出的透视的变形。

下面给出了一些结果的示例程序。

import numpy as np
import cv2

img = cv2.imread('dice.jpg')


# Colour range to be extracted
lower_blue = np.array([0,0,0])
upper_blue = np.array([24,24,24])

# Threshold the BGR image
dots = cv2.inRange(img, lower_blue, upper_blue)

# Colour range to be extracted
lower_blue = np.array([0,0,0])
upper_blue = np.array([226,122,154])

# Threshold the BGR image
upper_side_shape = cv2.inRange(img, lower_blue, upper_blue)

cv2.imshow('Upper side shape',upper_side_shape)
cv2.imshow('Dots',dots)

cv2.waitKey(0)
cv2.destroyAllWindows()

产生的一些图像:
python - 检测骰子的上侧-LMLPHP

最佳答案

最好的解决方案是点大小,这是我在评论中提到的。您找到最大的点,将其视为最大值,然后创建一个公差等级。

但是,如果所有点都几乎相等(以使事物等距的角度从边缘看),或者甚至太小,该怎么办?最好的解决方案是创建一个边界以捕获点。这需要分析骰子的边缘(基本上是边缘检测),但是一旦定义了边界,就很牢固。

您所需要的只是从所看到的角度捕获骰子的边缘。

这是一个视觉示例:

python - 检测骰子的上侧-LMLPHP

由于设置了虚拟边界,因此您只需测量y轴上特定点上方的点。

关于python - 检测骰子的上侧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36556921/

10-12 05:46