Cer*_*rin 5 python opencv computer-vision
我正在尝试使用 OpenCV 2.3 Python 包装器来计算图像的 DCT。据说,图像 == numpy 数组 == CV 矩阵,所以我认为这应该有效:
import cv2
img1 = cv2.imread('myimage.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
img2 = cv2.dct(img1)
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误:
cv2.error: /usr/local/lib/OpenCV-2.3.1/modules/core/src/dxt.cpp:2247: error: (-215) type == CV_32FC1 || type == CV_64FC1 in function dct
Run Code Online (Sandbox Code Playgroud)
我意识到错误意味着输入应该是 32 位或 64 位单通道浮点矩阵。但是,我认为这就是指定灰度时我的图像应该如何加载,或者至少它应该足够接近以便 CV2 应该能够计算出转换。
使用 cv2 为 DCT 转换图像的合适方法是什么?
使用 cv2 似乎没有任何简单的方法可以做到这一点。我能找到的最接近的解决方案是:
import cv, cv2
import numpy as np
img1 = cv2.imread('myimage.jpg', 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.SaveImage('output.jpg', img2)
Run Code Online (Sandbox Code Playgroud)