Как получить dct изображения в python с помощью opencv

Я пытался найти способ получить DCT изображения. Получив изображение и проведя кучу фильтров, я хочу рассчитать DCT. Ниже приведен фрагмент кода:

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)

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

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-битное число с плавающей запятой? Я не уверен в проблеме. Буду признателен за вашу помощь. Как я могу получить ДКТ? Я новичок в openCV и python. Я просмотрел другие 2/3 темы по той же теме, но это не сработало.


person Shobhit Puri    schedule 18.03.2013    source источник


Ответы (1)


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

imf = np.float32(imgcv1)/255.0  # float conversion/scale
dct = cv2.dct(imf)              # the dct
imgcv1 = np.uint8(dct*255.0)    # convert back to int
person Shobhit Puri    schedule 21.03.2013
comment
Разве вы не должны сначала умножить на 255, а затем преобразовать в uint8? - person Nagabhushan S N; 24.03.2019