求助:基于OpenCV实现游戏可变尺度鱼类图标定位的优化方案
游戏图像中鱼类图标定位问题求助
我刚接触计算机视觉领域,需要在游戏图像中定位鱼类图标并获取其坐标。该图标存在以下识别难点:
- 随水中位置改变尺寸
- 拉取时颜色变化
- 游戏特效常干扰识别
核心问题是图标尺度频繁变化,已尝试的方法效果不佳或不稳定:
已尝试的方法
1. 模板匹配
图标尺寸不同时效果差;尝试多尺度模板数组,不仅不稳定还大幅降低算法速度,相关代码如下:
std::vector<Mat> fishIcon; const std::vector<double> SCALES = { 0.4, 0.5, 0.6, 0.8, 1.0, 1.2, 1.4 }; // 创建多尺度模板 for (double scale : SCALES) { Mat resIcon; resize(sourceIcon, resIcon, Size(0, 0), scale, scale); fishIcon.push_back(resIcon); } // 在图像中搜索图标的方法 bool FindObject(Mat& templateForFind, Mat& screenshot, Point& maxLoc, Mat& result, bool debug, double confid) { matchTemplate(screenshot, templateForFind, result, TM_CCOEFF_NORMED); double minVal, maxVal; minMaxLoc(result, &minVal, &maxVal, NULL, &maxLoc); if (debug) { std::cout << maxVal << std::endl; } if (maxVal >= confid) { return true; } else { return false; } } // 遍历所有尺度直到找到匹配项 for (Mat ic : fishIcon) { if (FindObject(ic, screenshotGray, max_loc, result, true, 0.8)) { fishIconPosition = Point(max_loc.x, max_loc.y); found = true; break; } }
2. ORB与直方图基础搜索方法
尝试OpenCV官网介绍的ORB与直方图基础搜索方法,效果同样不理想。
现寻求更简单高效的解决方案,恳请各位提供相关思路。
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

