2013-03-18 5 views
2

Я пытался выяснить способ получения DCT изображения. Получив изображение и сделав кучу фильтрации, я хочу рассчитать DCT. Ниже приводится код sniplet:Как получить dct изображения в python с помощью opencv

imgcv1 = cv2.split(imgcv)[0] 
cv2.boxFilter(imgcv1, 0, (7,7), imgcv1, (-1,-1), False, cv2.BORDER_DEFAULT) 
#resize image to 32x32 
cv2.resize(imgcv1, (32, 32) ,imgcv1) 

Я пытался играть с описанием данного here, но без успеха. Когда я пытался что-то вроде:

dst = cv2.dct(imgcv1) 

Я получаю сообщение об ошибке, как:

cv2.error: /build/buildd/opencv-2.3.1/modules/core/src/dxt.cpp:2247: error: (-215) type == CV_32FC1 || type == CV_64FC1 in function dct 

Из того, что я могу понять из ошибки в том, что ввод не 32 бит с плавающей точкой, но 8 бит. Как я могу преобразовать его и передать его как 32-битный float? Я не уверен в этой проблеме. Буду признателен за вашу помощь. Как я могу получить DCT? Я довольно новичок в openCV и python. Я искал другие темы 2/3 на одной теме, но это не сработало.

ответ

1

Я нашел решение. Как я уже сказал, нам нужно преобразовать в float, который тоже находится в диапазоне от 0 до 1. Затем нам нужно его преобразовать после вычисления DCT:

imf = np.float32(imgcv1)/255.0 # float conversion/scale 
dst = cv2.dct(imf)   # the dct 
imgcv1 = np.uint8(dst)*255.0 # convert back