OpenCV實(shí)現(xiàn)圖片編解碼實(shí)踐
原圖:

圖像信息,可以看到圖像是一個(gè)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()
僅僅提取一個(gè)100*100的DCT系數(shù)后的效果:


當(dāng)用800*1000的DCT系數(shù):

可以看到圖像細(xì)節(jié)更豐富了一些:

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()
當(dāng)用816*1200的DCT系數(shù):

可以看出圖像恢復(fù)到原來(lái)的質(zhì)量了.

分析代碼:
img_dct保存的是dct變換后的矩陣,img_dct_log是矩陣中的元素首先取絕對(duì)值,再求對(duì)數(shù)的矩陣.
img_dct_log = np.log(abs(img_dct))
那么對(duì)數(shù)的底是多少呢?
打印出來(lái)img_dct_log和abs(img_dct)看一下:

打印結(jié)果:

其中9.45971865e+04=9.45971865 x 10^4 =94597.1865表示的是科學(xué)計(jì)數(shù)法.

我們看到只有在底數(shù)取e的時(shí)候,對(duì)應(yīng)的對(duì)數(shù)才符合題目輸出要求,所以,python numpy.log函數(shù)取的是以自然常數(shù)e為地的對(duì)數(shù).
到此這篇關(guān)于OpenCV實(shí)現(xiàn)圖片編解碼實(shí)踐的文章就介紹到這了,更多相關(guān)OpenCV 圖片編解碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)比Python中__getattr__和 __getattribute__獲取屬性的用法
這篇文章主要介紹了對(duì)比Python中__getattr__和 __getattribute__獲取屬性的用法,注意二者間的區(qū)別,__getattr__只作用于不存在的屬性,需要的朋友可以參考下2016-06-06
基于深度學(xué)習(xí)和OpenCV實(shí)現(xiàn)目標(biāo)檢測(cè)
這篇文章主要介紹了通過(guò)使用OpenCV進(jìn)行基于深度學(xué)習(xí)的對(duì)象檢測(cè)以及使用OpenCV檢測(cè)視頻,文中的示例代碼講解詳細(xì),需要的可以參考一下2021-12-12
pytest自動(dòng)化測(cè)試數(shù)據(jù)驅(qū)動(dòng)yaml/excel/csv/json
這篇文章主要為大家介紹了pytest自動(dòng)化測(cè)試數(shù)據(jù)驅(qū)動(dòng)yaml/excel/csv/json的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
python中requests爬去網(wǎng)頁(yè)內(nèi)容出現(xiàn)亂碼問(wèn)題解決方法介紹
這篇文章主要介紹了python中requests爬去網(wǎng)頁(yè)內(nèi)容出現(xiàn)亂碼問(wèn)題解決方法,2017-10-10
使用Python3?Boto3包刪除AWS?CloudFormation的棧(Stacks)
這篇文章主要介紹了如何使用Python3?Boto3刪除AWS?CloudFormation的棧(Stacks),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01
Pycharm 文件更改目錄后,執(zhí)行路徑未更新的解決方法
今天小編就為大家分享一篇Pycharm 文件更改目錄后,執(zhí)行路徑未更新的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作
這篇文章主要介紹了Django框架orM與自定義SQL語(yǔ)句混合事務(wù)控制操作,結(jié)合實(shí)例形式分析了同一個(gè)方法里面既有ORM又有自定義SQL 語(yǔ)句的情況下事務(wù)控制相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
Python實(shí)現(xiàn)的密碼強(qiáng)度檢測(cè)器示例
這篇文章主要介紹了Python實(shí)現(xiàn)的密碼強(qiáng)度檢測(cè)器,結(jié)合實(shí)例形式分析了Python密碼強(qiáng)度檢測(cè)的原理與實(shí)現(xiàn)方法,涉及Python字符串運(yùn)算與轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08

