我一直试图想出一种获得图像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)
我一直在尝试使用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位浮点数传递?我不确定这个问题。我很感激你的帮助。我怎样才能获得DCT?我是openCV和python的新手。我搜索了同一主题的其他2/3线程,但它没有用。
答案 0 :(得分:1)
我找到了解决方案。正如我所说,我们需要在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