美文网首页
pyppeteer(六)--通过opencv查找图片在另一张图片

pyppeteer(六)--通过opencv查找图片在另一张图片

作者: 瓜T_T | 来源:发表于2019-06-28 15:13 被阅读0次
    # -*- coding:utf-8 -*-
    """
        利用opencv找到图片在另外张图片中的位置
    """
    import cv2
    import numpy as np 
    """
        cv2.imread()
        参数1:文件路径
        参数2:>0(整数,一般为1)==cv2.IMREAD_COLOR 读取彩色图片
              0==cv2.IMREAD_GRAYSCALE 以灰读模式读取图片,图片就算是彩色也是黑白
              <0(整数,一般为-1)==cv2.IMREAD_UNCHANGED 读取原图,包括alpha通道,alpha通道表示一副图片的透明度。
    """
    img = cv2.imread("bg.png",1)
    gray = cv2.imread("bg.png",0)
    
    img2 = cv2.imread("flag.png",0)
    w,h = img2.shape[::-1]
    """
        TM_SQDIFF 平方差匹配法    该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大
        TM_CCORR 相关匹配法  该方法采用乘法操作;数值越大表明匹配程度越好。
        TM_CCOEFF 相关系数匹配法   1表示完美的匹配;-1表示最差的匹配。
        TM_SQDIFF_NORMED    归一化平方差匹配法      
        TM_CCORR_NORMED 归一化相关匹配法      
        TM_CCOEFF_NORMED    归一化相关系数匹配法
    """
    res = cv2.matchTemplate(gray,img2,cv2.TM_CCOEFF_NORMED)
    print(res)
    

    res返回的是一个阈值矩阵。

    threshold = 0.9
    loc = np.where(res >= threshold)
    print(loc)
    

    通过分别设置阈值为0.1、0.2、0.5、0.6、0.8、0.9,打印loc的个数可以知道,当阈值较小时,候选坐标会很多,当阈值较大时,候选坐标会为空,我们只要设置合理的算法找出阈值时候选坐标唯一,这个唯一的坐标就是我们要求的坐标

    L = 0
    R = 1
    count = 0
    while 1:
        threshold = (L+R)/2
        count += 1
        print(count)
        loc = np.where(res >= threshold)
        if len(loc[0]) > 1:
            L += (R-L) /2
        elif len(loc[0]) == 1:
            print(loc)
            pt = loc[::-1]
            print('目标区域的左上角坐标:',pt[0],pt[1])
            print('次数:',count)
            print('阀值',threshold)
            break
        elif len(loc[0]) < 1:
            R -= (R-L) / 2
    

    余下的代码

    """
        cv2.rectangle()给图片添加方框
        参数1:图片
        参数2:左上角坐标
        参数3:右下角坐标
        参数4:颜色
        参数5:线粗
    """
    cv2.rectangle(img,pt,(pt[0]+w,pt[1]+h),(34,139,139),2)
    """
        cv2.imshow():创建一个窗口显示图片
        参数1:窗口名字,可以创建多个窗口中,但是每个窗口不能重名;
        参数2:读入的图片。
    """
    
    
    cv2.imshow('pic',img)
    cv2.imshow('pic1',gray)
    cv2.imshow('xxx',img2)
    """
        cv2.waitKey():键盘绑定函数,
        参数1:等待毫秒数,将等待特定的几毫秒,看键盘是否有输入。
        如果其参数为0,则表示无限期的等待键盘输入。
        如果show命令不设置wait函数创建后马上消失。
    """
    cv2.waitKey(0)
    

    总体运行效果:

    image.png

    相关文章

      网友评论

          本文标题:pyppeteer(六)--通过opencv查找图片在另一张图片

          本文链接:https://www.haomeiwen.com/subject/njascctx.html