第十六篇【传奇开心果系列】Python的OpenCV库技术点案例示例:图像质量评估

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

将图像转换为0-1范围

original_image = original_image.astype(float) / 255.0
reconstructed_image = reconstructed_image.astype(float) / 255.0

计算结构相似性指数

ssim_score = compare_ssim(original_image, reconstructed_image)

print(“Structural Similarity Index (SSIM):”, ssim_score)


在上述示例代码中,我们首先使用`cv2.imread()`函数加载原始图像和重建图像,并将它们转换为灰度图像(通过参数`cv2.IMREAD_GRAYSCALE`)。


接下来,将图像的像素值范围从0-255转换为0-1,这是由于`compare_ssim`函数需要输入在0-1范围内的图像。


然后,使用`compare_ssim`函数计算原始图像和重建图像之间的结构相似性指数。


最后,打印出计算得到的结构相似性指数值。


需要注意的是,结构相似性指数(SSIM)的取值范围为-1到1,越接近1表示图像的结构越相似,质量越好。一般来说,SSIM值大于0.8被认为是较好的图像质量。


### 五、视频质量评估示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/b3b894911d6a4cad800dbfee6a2e6b56.jpg)要进行视频质量评估,可以使用OpenCV的`cv2.quality.QualityPSNR`和`cv2.quality.QualitySSIM`类。以下是使用OpenCV计算视频峰值信噪比(PSNR)和视频结构相似性指数(SSIM)的示例代码:



import cv2

创建QualityPSNR对象

psnr_quality = cv2.quality.QualityPSNR()

创建QualitySSIM对象

ssim_quality = cv2.quality.QualitySSIM()

打开原始视频文件和重建视频文件

original_video = cv2.VideoCapture(‘original.mp4’)
reconstructed_video = cv2.VideoCapture(‘reconstructed.mp4’)

逐帧读取视频并计算质量评估指标

while True:
# 读取一帧原始视频和重建视频
ret1, frame1 = original_video.read()
ret2, frame2 = reconstructed_video.read()

# 检查视频是否读取完毕
if not ret1 or not ret2:
    break

# 将帧转换为灰度图像
gray_frame1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
gray_frame2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

# 计算PSNR
psnr_quality.compute(gray_frame1, gray_frame2)

# 计算SSIM
ssim_quality.compute(gray_frame1, gray_frame2)

获取最终的PSNR和SSIM评估结果

psnr_score = psnr_quality.getQualityScore()
ssim_score = ssim_quality.getQualityScore()

print(“Video PSNR:”, psnr_score)
print(“Video SSIM:”, ssim_score)

释放视频对象

original_video.release()
reconstructed_video.release()


在上述示例代码中,我们首先创建了`QualityPSNR`和`QualitySSIM`对象,用于计算视频的峰值信噪比和结构相似性指数。


然后,通过`cv2.VideoCapture`打开原始视频文件和重建视频文件,并使用`read()`方法逐帧读取视频。


接下来,将每一帧转换为灰度图像,然后调用`compute()`方法来计算每一帧的PSNR和SSIM。


最后,通过调用`getQualityScore()`方法获取最终的PSNR和SSIM评估结果,并打印出来。


需要注意的是,以上示例代码仅展示了如何使用OpenCV计算视频的PSNR和SSIM。在实际应用中,可能还需要考虑其他视频质量评估指标,并根据具体需求进行相应的处理和分析。


### 六、OpenCV均方根误差计算示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/56f10027001847768d9a4ea63ded6cc8.jpg)OpenCV库本身没有提供直接计算均方根误差(RMSE)的函数,但我们可以使用NumPy库结合OpenCV来计算均方根误差。以下是一个使用OpenCV和NumPy计算均方根误差的示例代码:



import cv2
import numpy as np

加载原始图像和重建图像

original_image = cv2.imread(‘original.jpg’, cv2.IMREAD_GRAYSCALE)
reconstructed_image = cv2.imread(‘reconstructed.jpg’, cv2.IMREAD_GRAYSCALE)

计算均方根误差

mse = np.mean((original_image - reconstructed_image) ** 2)
rmse = np.sqrt(mse)

print(“Root Mean Squared Error (RMSE):”, rmse)


在上述示例代码中,我们使用`cv2.imread()`函数加载原始图像和重建图像,并将它们转换为灰度图像(通过参数`cv2.IMREAD_GRAYSCALE`)。


然后,使用NumPy库计算均方根误差,首先计算均方误差(MSE),然后取其平方根得到均方根误差(RMSE)。


最后,打印出计算得到的均方根误差值。


需要注意的是,RMSE用于衡量图像重建或预测结果与原始图像之间的平均误差,数值越小表示重建或预测的准确性越高。


### 七、OpenCV多尺度结构相似性指数计算


![在这里插入图片描述](https://img-blog.csdnimg.cn/01efeda652564f8199c7fda6ed322ab0.jpg#pic_center)要计算多尺度结构相似性指数(MS-SSIM),可以使用第三方库scikit-image中的`skimage.measure.compare_msssim`函数。请确保已安装scikit-image库。


以下是使用scikit-image计算多尺度结构相似性指数的示例代码:



import cv2
from skimage.measure import compare_msssim

加载原始图像和重建图像

original_image = cv2.imread(‘original.jpg’, cv2.IMREAD_GRAYSCALE)
reconstructed_image = cv2.imread(‘reconstructed.jpg’, cv2.IMREAD_GRAYSCALE)

将图像转换为0-1范围

original_image = original_image.astype(float) / 255.0
reconstructed_image = reconstructed_image.astype(float) / 255.0

计算多尺度结构相似性指数

msssim_score = compare_msssim(original_image, reconstructed_image)

print(“Multi-Scale Structural Similarity Index (MS-SSIM):”, msssim_score)


在上述示例代码中,我们首先使用`cv2.imread()`函数加载原始图像和重建图像,并将它们转换为灰度图像(通过参数`cv2.IMREAD_GRAYSCALE`)。


接下来,将图像的像素值范围从0-255转换为0-1,这是由于`compare_msssim`函数需要输入在0-1范围内的图像。


然后,使用`compare_msssim`函数计算原始图像和重建图像之间的多尺度结构相似性指数。


最后,打印出计算得到的多尺度结构相似性指数值。


需要注意的是,多尺度结构相似性指数(MS-SSIM)是对结构相似性指数的改进,它考虑了多个尺度下的结构相似性。MS-SSIM的取值范围为0-1,越接近1表示图像的结构越相似,质量越好。一般来说,MS-SSIM值大于0.8被认为是较好的图像质量。


### 八、OpenCV视频质量评估完整性示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/de0352add21a4891994a6da0bbaca624.png)OpenCV提供了用于视频质量评估的函数。下面是使用OpenCV计视频序列的峰值信噪比(PSNR)和结构相似性指数(SSIM)的示例代码:



import cv2

创建QualityPSNR对象

psnr_quality = cv2.quality.QualityPSNR()

创建QualitySSIM对象

ssim_quality = cv2.quality.QualitySSIM()

打开视频文件

video = cv2.VideoCapture(‘video.mp4’)

逐帧读取视频并计算质量评估指标

while True:
# 读取一帧视频
ret, frame = video.read()

# 检查视频是否读取完毕
if not ret:
    break

# 将帧转换为灰度图像
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# 计算PSNR
psnr_quality.compute(gray_frame)

# 计算SSIM
ssim_quality.compute(gray_frame)

获取最终的PSNR和SSIM评估结果

psnr_score = psnr_quality.getQualityScore()
ssim_score = ssim_quality.getQualityScore()

print(“Video PSNR:”, psnr_score)
print(“Video SSIM:”, ssim_score)

释放视频对象

video.release()


在上述示例代码中,我们首先创建了`QualityPSNR`和`QualitySSIM`对象,用于计算视频的峰值信噪比和结构相似性指数。


然后,通过`cv2.VideoCapture`打开视频文件,并使用`read()`方法逐帧读取视频。


接下来,将每一帧转换为灰度图像,然后分别调用`compute()`方法来计算每一帧的PSNR和SSIM。


最后,通过调用`getQualityScore()`方法获取最终的PSNR和SSIM评估结果,并打印出来。


需要注意的是,以上示例代码仅展示了如何使用OpenCV计算视频的PSNR和SSIM。在实际应用中,可能还需要考虑其他视频质量评估指标,并根据具体需求进行相应的处理和分析。


### 九、OpenCV主观评估示例代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/38743572c19d47babc49cf1f9e769743.jpg)OpenCV库本身不提供主观评估的函数,因为主观评估通常需要人工参与。主观评估是通过让人们观看和评价图像或视频的质量来进行的,而不是通过算法自动计算。


以下是一个主观评估的示例代码,用于让人们观看图像并给出评分:



import cv2

加载图像

image = cv2.imread(‘image.jpg’)

显示图像

cv2.imshow(‘Image’, image)
cv2.waitKey(0)

提示用户给出评分

rating = input(“请给出图像的质量评分(1-10):”)

将评分转换为整数

rating = int(rating)

打印评分结果

print(“图像质量评分:”, rating)

关闭图像显示窗口

cv2.destroyAllWindows()


在上述示例代码中,我们首先使用`cv2.imread()`函数加载图像。


然后,使用`cv2.imshow()`函数显示图像,并使用`cv2.waitKey(0)`等待用户按下任意键来关闭图像窗口。



学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!



### 一、Python所有方向的学习路线



Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。



![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)



### 二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。



![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)



### 三、全套PDF电子书



书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

![](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)



### 四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。



![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)



### 五、实战案例



光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。



![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)



### 六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。



![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)  

![](https://img-blog.csdnimg.cn/img_convert/d2d978bb523c810abca3abe69e09bc1a.png)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值