我试图在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