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

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

$\begin{pmatrix} E_R\\ E_G\\ E_B \end{pmatrix} = \begin{pmatrix} \frac {\sum_{i=1}^{n} R_1-\sum_{i=1}^{n} R_2}{\sum_{i=1}^{n} R_2}\\ \frac {\sum_{i=1}^{n} G_1-\sum_{i=1}^{n} G_2}{\sum_{i=1}^{n} G_2}\\ \frac {\sum_{i=1}^{n} B_1-\sum_{i=1}^{n} B_2}{ \sum_{i=1}^{n} B_2} \end{pmatrix}$

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:
#缩小图片
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
69 0
|
3月前
|

OpenCV 图像处理学习手册：1~5
OpenCV 图像处理学习手册：1~5
28 0
|
2月前
|

OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
42 0
|
4月前
|

OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
1. 形态学 OpenCV形态学是一种基于OpenCV库的数字图像处理技术，主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法，包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
57 0
|
4月前
|

OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG
1.概念介绍 视频背景扣除原理：视频是一组连续的帧（一幅幅图组成），帧与帧之间关系密切(GOP/group of picture)，在GOP中，背景几乎是不变的，变的永远是前景。
81 0
|
2月前
|

28 0
|
2月前
|

OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
42 0
|
4月前
|

OpenCV简介、导入及图像处理基础方法讲解（图文解释 附源码）
OpenCV简介、导入及图像处理基础方法讲解（图文解释 附源码）
45 0
|
4月前
|

OpenCV图像处理-图像分割-MeanShift
1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的，而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色，平滑色彩细节，侵蚀掉面积较小的的颜色区域，它以图像上任意一点P为圆心，半径为sp，色彩幅值为sr进行不断地迭代。
59 0
|
4月前
|

OpenCV4图像处理-图像交互式分割-GrabCut
1.理论介绍 用户指定前景的大体区域，剩下为背景区域，还可以明确指出某些地方为前景或者背景，GrabCut算法采用分段迭代的方法分析前景物体形成模型树，最后根据权重决定某个像素是前景还是背景。
23 0