深入学习OpenCV中图像相似度的算法

本文介绍了图像处理的基础知识,包括图像灰度化的目的和多种方法,如OpenCV的直接灰度化、读取后再灰度化以及使用PIL库。此外,还详细探讨了Python中的图像增强技术,如点增强、空间增强和频域增强。接着,讲解了两种图片相似度算法:基于像素方差比较和感知哈希算法。文章最后简述了OpenCV中waitKey()函数的作用和图像增强中一阶微分与二阶微分的区别,以及安装OpenCV的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程。但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜索的流程整理一下,想到什么说什么吧。

  首先在进行图片灰度化处理之前,我觉得有必要了解一下为什么要进行灰度化处理。

图像灰度化的目的是什么?

  将彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由R,G,B三个分量决定,而每个分量中可取值0-255,这样一个像素点可以有1600多万(256*256*256=1677256)的颜色的变化范围。而灰度图像是R,G,B三个分量相同的一种特殊的彩色图像,其中一个像素点的变化范围为256种,所以在数字图像处理中一般将各种格式的图像转化为灰度图像以使后续的图像的计算量少一些。灰度图像的描述与彩色图像一样仍然反映了整副图像的整体和局部的色度和高亮等级的分布和特征。

一:图像灰度化处理

  灰度化处理就是将一幅色彩图像转化为灰度图像的过程。彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程。灰度值大的像素点比较亮(像素值最大为255,为白色),反之比较暗(像素最下为0,为黑色)。

1.1   图像灰度化的算法:

  1)最大值法:使转化后的R,G,B得值等于转化前3个值中最大的一个,即:R=G=B=max(R,G,B)。这种方法转换的灰度图亮度很高。


  2)平均值法:是转化后R,G,B的值为转化前R,G,B的平均值。即:R=G=B=(R+G+B)/3。这种方法产生的灰度图像比较柔和。


  3)加权平均值法:按照一定权值,对R,G,B的值加权平均,即:这里写图片描述分别为R,G,B的权值,取不同的值形成不同的灰度图像。由于人眼对绿色最为敏感,红色次之,对蓝色的敏感性最低,因此使将得到较易识别的灰度图像。一般时,得到的灰度图像效果最好。

 

1.2  图像灰度化的三种方法
  1.2.1,OpenCV直接灰度化

  下面的这种方法,在读取图片的时候,直接将图片转化为灰度化:

import cv2

img = cv2.imread(photo_file, cv2.IMREAD_GRAYSCALE)

  得到的img是一个函数。

  1.2.2,OpenCV先读取再灰度化

  下面的方法,先读取图片,然后再转化为灰度图。

import  cv2

img = cv2.imread(photo_file)
# Y = 0.299R + 0.587G + 0.114B
grey_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

  

  1.2.3,使用PIL库中的Image模块

  首先读取图片,然后灰度化,最后转化为数组

import numpy as np
form PIL import Image

# 使用PIL库中的Image模块
# L = 0.299R + 0.587G + 0.114B
img2 = Image.open(photo_file)
grey_img2 = img2.convert('L')
grey_img22 = np.array(grey_img2)
print(type(grey_img22))

  使用python中的图像处理库PIL来实现不同图像格式的转化,对于彩色图像,不管其图像格式是PNG,还是BMP,还是JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者JPG,打开后,其模式为“L”。

  

1.3   代码实现(灰度化+二值化)
from PIL import Image

#  load a color image
im = Image.open('durant.jpg' )

#  convert to grey level image
Lim = im.convert('L' )
Lim.save('grey.jpg' )

#  setup a converting table with constant threshold
threshold = 185
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)

# convert to binary image by the table
bim = Lim.point(table, '1' )

bim.save('durant_grey.jpg' )
原图图片效果展示:
 
灰度化图片效果展示:

二值化图片效果展示:

 1.3 convert() 方法详解

  Convert()会根据传入参数的不同将图像变成不同的模式。PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值