OpenCV实现图片编解码实践

 更新时间:2021年06月04日 08:49:43   作者:tugouxp  
在很多应用中,经常会直接把图片的二进制数据进行交换,这就需要对普通进行编码解码,那么怎么才能实现,本文就来介绍一下

原图:

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

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系数后的效果:

当用800*1000的DCT系数:

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

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系数:

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

分析代码:

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

img_dct_log = np.log(abs(img_dct))

那么对数的底是多少呢?

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

打印结果:

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

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

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

相关文章

  • Pandas数据清洗的维度详解

    Pandas数据清洗的维度详解

    数据清洗是数据分析的基础,关键于提高数据质量和保证分析准确性。通过数据清洗,可以减少错误、增加数据可用性、保护隐私。Pandas提供多种方法处理缺失值和重复值,还有多种方式识别和处理异常值。掌握这些技巧对提升数据处理能力极为重要
    2024-09-09
  • Python实现两组数据纵向排序

    Python实现两组数据纵向排序

    在数据分析和处理过程中,排序是一项非常常见的操作,本文将详细讲解如何使用Python实现两组数据的纵向排序,并提供完整的开发思路和代码示例,需要的可以参考下
    2024-12-12
  • Python使用datetime库实现对时间的获取方法

    Python使用datetime库实现对时间的获取方法

    这篇文章通过一个简单示例给大家介绍了Python如何使用datetime库实现对时间的获取方法,文章通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11
  • python实现中文分词FMM算法实例

    python实现中文分词FMM算法实例

    这篇文章主要介绍了python实现中文分词FMM算法,实例分析了Python基于FMM算法进行中文分词的实现方法,涉及Python针对文件、字符串及正则匹配操作的相关技巧,需要的朋友可以参考下
    2015-07-07
  • Tensorflow使用Anaconda、pycharm安装记录

    Tensorflow使用Anaconda、pycharm安装记录

    这篇文章主要介绍了Tensorflow使用Anaconda、pycharm安装记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python中uuid模块实例浅析

    python中uuid模块实例浅析

    在本篇文章里小编给大家整理了一篇关于python中uuid模块实例浅析内容,有需要的朋友们可以学习下。
    2020-12-12
  • 将Django项目部署到CentOs服务器中

    将Django项目部署到CentOs服务器中

    今天小编就为大家分享一篇关于将Django项目部署到CentOs服务器中的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Python实现将Excel内容插入到Word模版中

    Python实现将Excel内容插入到Word模版中

    前段时间因为需要处理一大堆验收单,都是一些简单的复制粘贴替换工作,于是就想到用python进行处理。本文分享了用python将excel文件单元格内容插入到word模版中并保存为新文件的办法,希望对大家有所帮助
    2023-03-03
  • python+selenium 脚本实现每天自动登记的思路详解

    python+selenium 脚本实现每天自动登记的思路详解

    这篇文章主要介绍了python+selenium 脚本实现每天自动登记,本文你给大家分享基本的思路,通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python做智能家居温湿度报警系统

    Python做智能家居温湿度报警系统

    本文为大家带来了Python通过HTTP协议做一个廉价的温湿度报警系统。感兴趣的朋友跟随小编一起看看吧
    2018-09-09

最新评论