我正在尝试制作一个游戏机器人,在此过程中,需要找到小地图,并将其裁剪掉,这样我才能弄清楚玩家的位置。
我能够拍摄图像的屏幕截图,裁剪出小地图所在的位置。但是,我无法从中获得确切的小地图边界框。
由于我是OpenCV和图像处理的新手,所以我不确定要完成此任务需要采取哪些步骤。
我应该采取什么步骤来找到小地图的边界框/坐标?
编辑:当我的意思是“知道确切的边界框”时,我不清楚。我需要从图像中准确提取小地图区域。除了小地图的左上角之外,我没有任何坐标信息,并且小地图的大小根据地图的大小而变化,因此我无法对坐标进行硬编码。
答案 0 :(得分:0)
如果您知道感兴趣区域的确切坐标,并且始终将该区域固定在同一位置,则可以使用具有已知x,y坐标的drawing functions中的任何一个; 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轴上的第二个下降,依此类推,您可以找到地图的边缘。
坐标100100(python)上的像素值示例:
img = cv2.imread('myImage.png')
px = img[100,100]
print px
要进行解析,请阅读fast, optimized "for" pixel loops with OpenCV and Python的这篇文章