Я пытаюсь использовать функцию dct () в OpenCV для вычисления дискретного косинусного преобразования, но получаю странные результаты.
Мой скрипт:
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? Что правильно?