我正在尝试制作一个游戏机器人,在这个过程中,我需要找到小 map 并将其裁剪掉,这样我才能找出玩家所在的位置。
我能够截取图像,裁剪出小 map 的大致位置。但是,我无法从中获得确切的小 map 边界框。
由于我对 OpenCV 和图像处理还很陌生,所以我不确定我需要采取哪些步骤来完成这项任务。
我应该采取什么步骤来找到小 map 的边界框/坐标?
编辑:当我的意思是“知道确切的边界框”时,我似乎不清楚。我需要从图像中准确提取小 map 区域。除了小 map 的左上角,我没有任何坐标信息,而且小 map 的大小会根据 map 的大小而变化,所以我无法对坐标进行硬编码。
最佳答案
如果您知道感兴趣区域的确切坐标,并且该区域始终固定在同一位置,您可以使用任何 drawing functions使用已知的 x,y 坐标; h,w 尺寸。
void cv::rectangle ( InputOutputArray img,
Point pt1,
Point pt2,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
为了找到动态的 w,h: 从已知的左上角坐标开始逐像素解析图像并将读取像素的颜色与已知像素进行比较,首先在 x 轴上升序直到你发现一个不匹配的像素。其次是 y 轴降序,依此类推,您可以找到 map 的边距。
坐标 100 100 处的像素值示例(python):
img = cv2.imread('myImage.png')
px = img[100,100]
print px
对于 fast, optimized "for" pixel loops with OpenCV and Python 的解析阅读这篇文章
关于Python-OpenCV 查找矩形并裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52274378/