Python OpenCV实现简单图片比对:特征值与像素求和法

清欢
清欢
发布时间:2026-10-13 | 5人浏览过
原创

本文介绍在Python中利用OpenCV进行简单图片比对的两种方法。第一种方法通过计算m x m图片矩阵的特征值并比较其范围来判断图片是否相同;第二种方法对二值化图片矩阵中的1进行求和,通过比较总和数值来识别图片。代码示例展示了如何读取灰度图像、计算指标并批量比对文件,适用于基础图像识别场景。

以下代码演示了两种基于OpenCV的图片比对策略。第一种策略针对m x m尺寸的图片矩阵计算其特征值,通过检查这些特征值是否处于特定阈值范围内,从而判定图片是否一致。第二种策略则针对图片矩阵中值为1的像素点进行求和运算,通过对比两个图像的总和数值差异来实现图片比对。

# -*- coding: utf-8 -*-
import cv2 as cv
import numpy as np
import os
file_dir_a='C:\Users\wt\Desktop\data\image1\\'
file_dir_b='C:\Users\wt\Desktop\data\image\\'
savepath='.\'

all_file_name_a=os.listdir(file_dir_a)
all_file_name_b=os.listdir(file_dir_b)
image_all_a=[]
image_all_b=[]
for name in all_file_name_a:
  image_one=[]
  image = cv.imread(file_dir_a+name, cv.IMREAD_GRAYSCALE)
  """arg是计算输入图片矩阵的特征值,通过对特征值的比较来实现图片的比对
  """
  # arg=np.linalg.eigvals(image) 
  """arg是计算输入二值图片矩阵中1的个数,通过1的总数来实现图片的比对
  """
  arg=sum(image)
  image_one.append(name)
  image_one.append(arg)
  image_all_a.append(image_one)#将一个图片的信息写入
  print '读入a'
# np.save('img_a.npy',image_all_a)
for name in all_file_name_b:
  image_one=[]
  image = cv.imread(file_dir_b+name, cv.IMREAD_GRAYSCALE)
  """同上
  """
  # arg=np.linalg.eigvals(image)
  arg=sum(image)
  image_one.append(name)
  image_one.append(arg)
  image_all_b.append(image_one)#将一个图片的信息写入
  print '读入b'
# np.save('img_b.npy',image_all_b)
print '开始比较'
result_all=[]
for a in image_all_a: #比较小的
  result = []
  for b in image_all_b:
    # print sum(a[1]-b[1])
    if abs(sum(a[1]-b[1]))<0.00001:
      result.append(a[0])
      result.append(b[0])
      result_all.append(result)
print '比较结束'
print result_all

np.save('match_result1.npy',result_all)

以上就是在Python中利用OpenCV进行简单图片比对的完整内容分享,希望能为读者提供有效的参考,也欢迎继续支持本站获取更多信息。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表