服务器之家

服务器之家 > 正文

OpenCV实现图片编解码实践

时间:2021-11-23 10:42     来源/作者:tugouxp

原图:

OpenCV实现图片编解码实践

图像信息,可以看到图像是一个816*2100像素的图片:

OpenCV实现图片编解码实践

python代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
 
img = cv2.imread("11.jpg", 0)
img1 = img.astype("float")
img_dct = cv2.dct(img1)
img_dct_log = np.log(abs(img_dct))
img_recor = cv2.idct(img_dct)
recor_temp = img_dct[0:100,0:100]
recor_temp2 = np.zeros(img.shape)
recor_temp2[0:100,0:100] = recor_temp
print recor_temp.shape
print recor_temp2.shape
img_recor1 = cv2.idct(recor_temp2)
plt.subplot(221)
plt.imshow(img)
plt.title("original")
plt.subplot(222)
plt.imshow(img_dct_log)
plt.title("dct transformed")
plt.subplot(223)
plt.imshow(img_recor)
plt.title("idct transformed")
plt.subplot(224)
plt.imshow(img_recor1)
plt.title("idct transformed2")
 
plt.show()

仅仅提取一个100*100的DCT系数后的效果:

OpenCV实现图片编解码实践

OpenCV实现图片编解码实践

当用800*1000的DCT系数:

OpenCV实现图片编解码实践

可以看到图像细节更丰富了一些:

OpenCV实现图片编解码实践

import cv2
import numpy as np
import matplotlib.pyplot as plt
 
img = cv2.imread("11.jpg", 0)
img1 = img.astype("float")
img_dct = cv2.dct(img1)
img_dct_log = np.log(abs(img_dct))
img_recor = cv2.idct(img_dct)
recor_temp = img_dct[0:800,0:1000]
recor_temp2 = np.zeros(img.shape)
recor_temp2[0:800,0:1000] = recor_temp
print recor_temp.shape
print recor_temp2.shape
img_recor1 = cv2.idct(recor_temp2)
plt.subplot(221)
plt.imshow(img)
plt.title("original")
plt.subplot(222)
plt.imshow(img_dct_log)
plt.title("dct transformed")
plt.subplot(223)
plt.imshow(img_recor)
plt.title("idct transformed")
plt.subplot(224)
plt.imshow(img_recor1)
plt.title("idct transformed2")
 
plt.show()

当用816*1200的DCT系数:

OpenCV实现图片编解码实践

可以看出图像恢复到原来的质量了.

OpenCV实现图片编解码实践

分析代码:

img_dct保存的是dct变换后的矩阵,img_dct_log是矩阵中的元素首先取绝对值,再求对数的矩阵.

img_dct_log = np.log(abs(img_dct))

那么对数的底是多少呢?

打印出来img_dct_log和abs(img_dct)看一下:

OpenCV实现图片编解码实践

打印结果:

OpenCV实现图片编解码实践

其中9.45971865e+04=9.45971865 x 10^4 =94597.1865表示的是科学计数法.

OpenCV实现图片编解码实践

我们看到只有在底数取e的时候,对应的对数才符合题目输出要求,所以,python numpy.log函数取的是以自然常数e为地的对数.

到此这篇关于OpenCV实现图片编解码实践的文章就介绍到这了,更多相关OpenCV 图片编解码内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/tugouxp/article/details/117454552

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部