Aircv的安装

  • Aircv是基于OpenCV的所以需要安装OpenCVnumpy
  • 通过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应该是是否开启调试模式 不用管他

  • 接下来是12def 其中有个main不算一共是11个函数

  • 还有2个注释掉的def 先不看

  • 接下来好好研究研究这11def

读取图片

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

可以看出调用了OpenCVimshow显示图片 并等待按键后消失

  • 调用一下康康

    import aircv
    
    
    def main():
        bmp = aircv.imread("./image/bmp.png")
        aircv.show(bmp)
    
    
    if __name__ == '__main__':
        main()
    
    

    imshow
    可以看出弹出来一个窗口显示了图片

使用像素匹配查找图片

  • 2个函数

  • find_all_templatefind_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)
    
  • 看看 干啥了 如果rgbTrue 则进行RGB三通道的拆分

  • 如果rgbFalse 则进行灰度处理

  • 并且我们发现了最后一个参数bgremove

  • 哦 看注释和参数名的意思 是负责去除背景的

  • rgb是否使用RGB通道拆分对图片进行处理

  • bgremovergbFalse的情况下 是否进行背景去除

  • 调用一下康康

    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_siftfind_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_allfind
  • 就是先使用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写了一个找图的函数
  • 可以看出找的速度很快 找的也很准确
  • 可以当做辅助脚本的找图工具
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐