图像处理基础(一)-OpenCV相似度匹配

简介:

图像处理基础,等大小图片相似度匹配

基于RGB通道的像素点相似度匹配算法思路

def compare_by_RGB(image_1,image_2):
    """
    基于通道和的差  
    :param image_1:  
    :param image_2:
    :return:
    """
    G_1 = 0
    B_1 = 0
    R_1 = 0
    G_2 = 0
    B_2 = 0
    R_2 = 0
    #第一个图像矩阵通道和
    for x in image_1:
        for y in x:
            G_1 += y[0]
            B_1 += y[1]
            R_1 += y[2]
    #第二个图像矩阵通道和
    for x in image_2:
        for y in x:
            G_2 += y[0]
            B_2 += y[1]
            R_2 += y[2]
    #图像矩阵各通道相似度
    inc_G = 1 - math.fabs(G_1 - G_2) / G_2
    inc_B = 1 - math.fabs(B_1 - B_2) / B_2
    inc_R = 1 - math.fabs(R_1 - R_2) / R_2
    dec = (inc_G + inc_B + inc_R) / 3
    return dec

根据不相似的像素点统计

def compare_by_pixe(pic1, pic2):
    """
    方法二,基于像素点相似数量统计
    :param pic1:
    :param pic2:
    :return:totlepix 像素点个数,diffcount 相似度 ,nptg,ptg
    """
    res={}
    #获取行数列数和通道数
    sp1 = pic1.shape
    sp2 = pic2.shape
    #获取矩阵大小
    res['totlepix'] = pic1.size # pix*3 矩阵大小等于像素点数乘以3
    #判断两张图片的行列数是否相同
    if sp1 != sp2:
        ret = "The two picture is in Different range"
        return ret
    DiffCount = 0
    #遍历矩阵行和列
    for index1 in range(sp1[0]):
        for index2 in range(sp1[1]):
            (b1, g1, r1) = pic1[index1, index2]
            (b2, g2, r2) = pic2[index1, index2]
            if (b1, g1, r1) != (b2, g2, r2):
                DiffCount = DiffCount + 1
    res['totlepix'] = res['totlepix'] / 3
    #相似度=不同的像素点数/像素点总数
    res['diffcount'] =1- DiffCount/ res['totlepix']
    return res

主函数测试


if __name__=="__main__":
    #相似度阈值  
    threshold_value=0.75
    path="./lab1_data/lab1_video.mp4"
    cap=cv2.VideoCapture(path)
    count=0
    if cap.isOpened():
        #锁,用来判断是否为第一帧
        flag=False
        while 1:
            ret,frame=cap.read()
            #缩小图片
            image=cv2.resize(frame,(32,32),interpolation=cv2.INTER_CUBIC)
            if flag==True:
                res=compare_by_pixe(image, temp)
                if res["diffcount"]<threshold_value:
                    cv2.imwrite("./lab1_save_data/"+str(count)+".jpg",frame)
                    count += 1
                #记录当前帧
                temp=image
            if flag==False:
                flag=True
                temp=image
            cv2.imshow("image",frame)
            if cv2.waitKey(10)=='q':
                break
        cv2.destroyAllWindows()
目录
相关文章
|
3月前
|
openCL 开发工具 C语言
OpenCV 图像处理学习手册:6~7
OpenCV 图像处理学习手册:6~7
77 0
|
3月前
|
存储 编解码 算法
OpenCV 图像处理学习手册:1~5
OpenCV 图像处理学习手册:1~5
32 0
|
2月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
46 0
|
4月前
|
算法 API 计算机视觉
OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
1. 形态学 OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
59 0
|
4月前
|
缓存 算法 计算机视觉
OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG
1.概念介绍 视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎是不变的,变的永远是前景。
91 0
|
2月前
|
编解码 算法 自动驾驶
探索OpenCV:图像处理的利器
探索OpenCV:图像处理的利器
30 0
|
2月前
|
监控 算法 Serverless
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
45 0
|
4月前
|
机器学习/深度学习 并行计算 算法
OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)
OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)
47 0
|
4月前
|
算法 计算机视觉
OpenCV图像处理-图像分割-MeanShift
1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心,半径为sp,色彩幅值为sr进行不断地迭代。
61 0
|
4月前
|
算法 计算机视觉
OpenCV4图像处理-图像交互式分割-GrabCut
1.理论介绍 用户指定前景的大体区域,剩下为背景区域,还可以明确指出某些地方为前景或者背景,GrabCut算法采用分段迭代的方法分析前景物体形成模型树,最后根据权重决定某个像素是前景还是背景。
23 0