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 图片编解码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 中的list和array的不同之处及转换问题

    python 中的list和array的不同之处及转换问题

    python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。这篇文章给大家介绍了python 中的list和array的不同之处及转换问题,需要的朋友参考下吧
    2018-03-03
  • Python标准库re的使用举例(正则化匹配)

    Python标准库re的使用举例(正则化匹配)

    正则表达式re是内置函数,通过一定的匹配规则获取指定的数据,下面这篇文章主要给大家介绍了关于Python标准库re的使用举例,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Python找出list中最常出现元素的方法

    Python找出list中最常出现元素的方法

    这篇文章主要介绍了Python找出list中最常出现元素的方法,给出了三种常用的方法供大家对比参考,需要的朋友可以参考下
    2016-06-06
  • pygame实现键盘和鼠标事件的处理

    pygame实现键盘和鼠标事件的处理

    这篇文章主要介绍了pygame实现键盘和鼠标事件的处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python 截取 取出一部分的字符串方法

    python 截取 取出一部分的字符串方法

    下面小编就为大家带来一篇python 截取 取出一部分的字符串方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 详解Python中enumerate函数的使用

    详解Python中enumerate函数的使用

    Python 的 enumerate() 函数就像是一个神秘的黑箱,它具有非常有用的高级用法。本文就来为大家详细讲一下它的使用,需要的可以参考一下
    2022-08-08
  • 在centos7中分布式部署pyspider

    在centos7中分布式部署pyspider

    PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
    2017-05-05
  • 使用django-guardian实现django-admin的行级权限控制的方法

    使用django-guardian实现django-admin的行级权限控制的方法

    这篇文章主要介绍了使用django-guardian实现django-admin的行级权限控制的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 浅谈Tensorflow由于版本问题出现的几种错误及解决方法

    浅谈Tensorflow由于版本问题出现的几种错误及解决方法

    今天小编就为大家分享一篇浅谈Tensorflow由于版本问题出现的几种错误及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python的多线程原来可以这样解

    python的多线程原来可以这样解

    这篇文章主要为大家介绍了python的多线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01

最新评论