3

私は画像の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ビット浮動小数点として渡すことができますか?問題はよくわかりません。よろしくお願いします。DCTを取得するにはどうすればよいですか?私はopenCVとpythonにかなり慣れていません。同じトピックで他の2/3スレッドを検索しましたが、機能しませんでした。

4

2 に答える 2

2

解決策を見つけました。先ほど言ったように、これも 0 から 1 の範囲内で float に変換する必要があります。その後、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
于 2013-03-21T14:33:59.723 に答える