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