如何检测简单但半透明的形状的存在?

我对 OpenCV 和 CV 整体还是很陌生。我正在尝试创建一个状态检测器,允许我从某个游戏的屏幕中提取信息。这个特征预处理已经差不多完成了,但是到现在为止我一直使用颜色作为提取有用信息的主要方式。我想捕捉一下屏幕中是否存在这个红色盾牌形状:

http://img2.mukewang.com/618a15980001f44902760433.jpg

盾牌的形状总是这样,但它是半透明的,因此无法进行颜色测试。

我还没有尝试过解决方案,经过大量的搜索和学习,对于这个问题,我不知道从哪里开始。

我有一个图像processedImage,想提取一个简单的布尔值来描述这个形状是否存在。

任何帮助将不胜感激。



莫回无
浏览 133回答 2
2回答

温温酱

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

杨__羊羊

我认为最好的解决方案是检测盾牌图像的边缘。您可以通过一些图像处理技术来做到这一点: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然后你可以调用它来“获取图像是否存在的布尔值”因为你没有问一个明确的问题我认为这个答案就足够了,但感觉如果需要详细说明,请随意发表评论!否则,如果这回答了您的问题,那么您可以单击帖子旁边的复选标记接受它:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python