为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

莫回无 2021-11-09 13:46:55
我对 OpenCV 和 CV 整体还是很陌生。我正在尝试创建一个状态检测器,允许我从某个游戏的屏幕中提取信息。这个特征预处理已经差不多完成了,但是到现在为止我一直使用颜色作为提取有用信息的主要方式。我想捕捉一下屏幕中是否存在这个红色盾牌形状:盾牌的形状总是这样,但它是半透明的,因此无法进行颜色测试。我还没有尝试过解决方案,经过大量的搜索和学习,对于这个问题,我不知道从哪里开始。我有一个图像processedImage,想提取一个简单的布尔值来描述这个形状是否存在。任何帮助将不胜感激。
查看完整描述

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])

在此处绘制饱和度通道仅用于可视化目的。一旦你得到这个,也许你可以使用某种模板匹配算法来获取位置。

//img1.sycdn.imooc.com//618a15b10001113a01820249.jpg

查看完整回答
反对 回复 2021-11-09
?
杨__羊羊

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然后你可以调用它来“获取图像是否存在的布尔值”因为你没有问一个明确的问题我认为这个答案就足够了,但感觉如果需要详细说明,请随意发表评论!否则,如果这回答了您的问题,那么您可以单击帖子旁边的复选标记接受它:)


查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号