如何使用opencv在python中获取图像的dct

时间:2013-03-18 23:11:42

标签: python opencv dct

我一直试图想出一种获得图像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线程,但它没有用。

1 个答案:

答案 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