Python 游戏辅助基础之 Aircv
Aircv的安装
Aircv
是基于OpenCV
的所以需要安装OpenCV
和numpy
- 通过
pip
安装就好了 pip install numpy
pip install opencv-contrib-python
pip install aircv
Aircv的学习之路
-
在网上找了一下 没有发现什么太详细的文档
-
不太清楚
aircv
具体都有些什么功能 -
然后无意间按下了
CTRL
点了一下import
后面的aircv
-
发现居然是开源的
-
可以研究一波啊
-
大致浏览了一下 就两个
import
import cv2 import numpy as np
-
然后下面有个
DEBUG = False
应该是是否开启调试模式 不用管他 -
接下来是
12
个def
其中有个main
不算一共是11
个函数 -
还有
2
个注释掉的def
先不看 -
接下来好好研究研究这
11
个def
吧
读取图片
def imread(filename):
im = cv2.imread(filename)
if im is None:
raise RuntimeError("file: '%s' not exists" % filename)
return im
可以看出只是调用了
OpenCV
中的imread
读取图片并返回
显示图片
def show(img):
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
可以看出调用了
OpenCV
的imshow
显示图片 并等待按键后消失
-
调用一下康康
import aircv def main(): bmp = aircv.imread("./image/bmp.png") aircv.show(bmp) if __name__ == '__main__': main()
可以看出弹出来一个窗口显示了图片
使用像素匹配查找图片
-
有
2
个函数 -
find_all_template
和find_template
-
通过名字就能看出来 这是找全部和找第一个
def find_all_template(im_source, im_search, threshold=0.5, maxcnt=0, rgb=False, bgremove=False): # ...
-
可以看出一共有
6
个参数 -
这些参数都是干啥的呢
-
前
2
个没有默认值 必须有滴 -
在注释里找到了
3
个Args: im_source(string): 图像、素材 im_search(string): 需要查找的图片 threshold: 阈值,当相识度小于该阈值的时候,就忽略掉
-
第一个
im_source
是一个字符串 ? ? ? 但刘叔觉得这不应该是字符串 -
因为代码里面没有任何
imread
的操作 而且下面的mian()
方法里也只传入imread
的返回值 -
im_source
传入的是原图像 -
im_search
传入的是需要查找的图片 -
threshold
是阈值 也就是相似度 相似度超过这个值才可以 -
至于
maxcnt
看看代码中这个东西干啥了if maxcnt and len(result) >= maxcnt: break
-
哦 原来是最大的结果数量啊
-
maxcnt
最大结果数量 默认为0
不限 -
接下来看看
rgb
很明显是个bool
型的 默认是False
if rgb: s_bgr = cv2.split(im_search) # Blue Green Red i_bgr = cv2.split(im_source) weight = (0.3, 0.3, 0.4) resbgr = [0, 0, 0] for i in range(3): # bgr resbgr[i] = cv2.matchTemplate(i_bgr[i], s_bgr[i], method) res = resbgr[0]*weight[0] + resbgr[1]*weight[1] + resbgr[2]*weight[2] else: s_gray = cv2.cvtColor(im_search, cv2.COLOR_BGR2GRAY) i_gray = cv2.cvtColor(im_source, cv2.COLOR_BGR2GRAY) # 边界提取(来实现背景去除的功能) if bgremove: s_gray = cv2.Canny(s_gray, 100, 200) i_gray = cv2.Canny(i_gray, 100, 200) res = cv2.matchTemplate(i_gray, s_gray, method)
-
看看 干啥了 如果
rgb
为True
则进行RGB
三通道的拆分 -
如果
rgb
为False
则进行灰度处理 -
并且我们发现了最后一个参数
bgremove
-
哦 看注释和参数名的意思 是负责去除背景的
-
rgb
是否使用RGB
通道拆分对图片进行处理 -
bgremove
在rgb
为False
的情况下 是否进行背景去除 -
调用一下康康
import aircv def main(): bmp = aircv.imread("./image/bmp.png") tim = aircv.imread("./image/tim.png") print(aircv.find_template(bmp, tim)) if __name__ == '__main__': main()
{‘result’: (34.5, 130.5), ‘rectangle’: ((23, 115), (23, 146), (46, 115), (46, 146)), ‘confidence’: 1.0}
-
结果很详细 我很满意
特征点的数量
def sift_count(img):
sift = _sift_instance()
kp, des = sift.detectAndCompute(img, None)
return len(kp)
嗯 就是统计图中包含的特征点的数量
使用特征点匹配查找图片
-
有
2
个函数 -
find_all_sift
和find_sift
def find_all_sift(im_source, im_search, min_match_count=4, maxcnt=0): # ...
-
可以看出有
4
个参数 -
注释里是这么写的
Args: im_source(string): 图像、素材 im_search(string): 需要查找的图片 threshold: 阈值,当相识度小于该阈值的时候,就忽略掉 maxcnt: 限制匹配的数量
-
看完这个注释我就很懵
threshold
这个东西在哪呢 -
有点粗心大意啊
-
康康
min_match_count
这个东西是干啥的吧if len(kp_sch) < min_match_count: return None
-
哦 原来是最少特征数量啊
-
和之前一样 就是实现方法不一样 就不贴代码了
查找图片
- 有
2
个函数 find_all
和find
- 就是先使用
Template
后使用Sift
获取图像亮度
def brightness(im):
im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(im_hsv)
height, weight = v.shape[:2]
total_bright = 0
for i in v:
total_bright = total_bright+sum(i)
return float(total_bright)/(height*weight)
传入一个图片 返回一个亮度
小结
Aircv
就是基于OpenCV
写了一个找图的函数- 可以看出找的速度很快 找的也很准确
- 可以当做辅助脚本的找图工具