2 回答

TA贡献1752条经验 获得超4个赞
由于您知道屏蔽始终是红色的,因此将图像转换为 HSV 并使用色调通道对图像进行阈值/滞后并获得红色区域
img = cv2.imread(img_path)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
m = cv2.split(hsv)
plt.imshow(m[1])
在此处绘制饱和度通道仅用于可视化目的。一旦你得到这个,也许你可以使用某种模板匹配算法来获取位置。

TA贡献1943条经验 获得超7个赞
我认为最好的解决方案是检测盾牌图像的边缘。您可以通过一些图像处理技术来做到这一点:
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_table_of_contents_imgproc/py_table_of_contents_imgproc.html#py-table-of-content-imgproc
也许是这样的:
edges = cv2.Canny(img,100,200) #img is your image
会为您工作,但如果使用彩色图像不起作用,您可以尝试先使用以下方法转换为灰度:
grey = cv2.cvtColor(screen, cv2.COLOR_RGB2GRAY) #screen is your image
然后做边缘检测算法。显然,一旦您找到形状,您就必须定义它(可能通过调整 Canny 参数,或执行其他一些技术,如 HoughLines),但要做到这一点,首先考虑诸如
盾牌总是在屏幕的同一区域吗?
大小总是一样的吗?
您还能想到其他任何定义特征吗?
然后围绕这些假设制定您的算法!我想你会想要定义一个函数并拥有它,return True或者return False然后你可以调用它来“获取图像是否存在的布尔值”因为你没有问一个明确的问题我认为这个答案就足够了,但感觉如果需要详细说明,请随意发表评论!否则,如果这回答了您的问题,那么您可以单击帖子旁边的复选标记接受它:)
添加回答
举报