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が見えています情報(何らかの理由で、すべてのピクセル>イプシロンが1にマップされているかのように)。保存された画像の範囲が0〜255で、表示されている画像が誤って0〜1にクリッピングされている可能性があります。 – wim