我試圖在OpenCV中使用dct()函數來計算離散餘弦變換,但我得到了奇怪的結果。用OpenCV計算DCT
我的腳本是:
import os, sys
import cv, cv2
import numpy as np
fn1 = 'original.jpg'
img1 = cv2.imread(fn1, cv2.CV_LOAD_IMAGE_GRAYSCALE)
h, w = img1.shape[:2]
vis0 = np.zeros((h,w), np.float32)
vis0[:h, :w] = img1
vis1 = cv2.dct(vis0)
img2 = cv.CreateMat(vis1.shape[0], vis1.shape[1], cv.CV_32FC3)
cv.CvtColor(cv.fromarray(vis1), img2, cv.CV_GRAY2BGR)
cv.ShowImage('',img2)
cv2.waitKey()
cv.SaveImage('saved.jpg', img2)
這似乎運行沒有錯誤,但()由ShowImage顯示的圖像,並通過SaveImage()保存的圖像出現很大的差異。不幸的是,我似乎無法找到DCT處理過的圖像的任何樣本圖像,所以我不確定哪個是正確的。
原始圖像:
所示出的DCT圖像:
保存的DCT圖像:
爲什麼會出現的示出和保存的DCT的圖像之間的這種差異?哪個是對的?
只是一個猜測,但保存的DCT在我看來是正確的,並表示DCT看起來莫名其妙地失去了大部分的該信息(如果所有像素> epsilon已被映射爲1,出於某種原因)。也許保存的圖像在0-255的範圍內,並且顯示的圖像被錯誤地裁剪爲0-1。 – wim