我正試圖在Android中實現DCT代碼。我正在使用代碼進行測試,但只是更改爲DCT而不是DFT:Convert OpenCv DFT example from C++ to Android。由於時間的關係,代碼已經發生了變化。現在我遇到問題,將圖像轉換回BGR。將OpenCv DCT轉換爲Android
public void transformImage(){
image = Highgui.imread(imageName, Highgui.CV_LOAD_IMAGE_GRAYSCALE);
try {
secondImage = new Mat(image.rows(), image.cols(), CvType.CV_64FC1);
image.convertTo(secondImage, CvType.CV_64FC1);
int m = Core.getOptimalDFTSize(image.rows());
int n = Core.getOptimalDFTSize(image.cols()); // on the border add zero values
Mat padded = new Mat(new Size(n, m), CvType.CV_64FC1); // expand input image to optimal size
Imgproc.copyMakeBorder(secondImage, padded, 0, m - secondImage.rows(), 0, n - secondImage.cols(), Imgproc.BORDER_CONSTANT);
Mat result = new Mat(padded.size(), padded.type());
Core.dct(padded, result);
Mat transformedImage = new Mat(padded.size(), padded.type());
Core.idct(result, watermarkedImage);
completedImage = new Mat(image.rows(), image.cols(), CvType.CV_64FC1);
Imgproc.cvtColor(transformedImage, completedImage, Imgproc.COLOR_GRAY2BGR);
} catch (Exception e) {
Log.e("Blargh", e.toString());
}
}
現在,我已經得到這個錯誤
04-09 21:35:52.362: E/cv::error()(23460): OpenCV Error: Assertion failed (depth == CV_8U || depth == CV_16U || depth == CV_32F) in void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int), file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/color.cpp, line 3642
我不知道我該怎麼辦,請大家指教。非常感激你的幫助!
哈哈感謝注意到,。但它現在拋出我這個異常:無效cv :: dct(cv :: InputArray,cv :: OutputArray,int),文件/ home/reports/ci中的斷言失敗(類型== CV_32FC1 || type == CV_64FC1) slave_desktop/50-SDK/opencv/modules/core/src/dxt.cpp,第2281行 我假設cvType是錯的吧? – yukilynn
我已更新答案 - 請參閱您的想法。 – timegalore
感謝您的更新。但我仍然得到這個:斷言失敗(類型== CV_32FC1 ||類型== CV_64FC1)在無效cv :: dct(cv :: InputArray,cv :: OutputArray,int),文件/ home/reports/ci/slave_desktop /50-SDK/opencv/modules/core/src/dxt.cpp,第2281行。我需要做些什麼來解決它? – yukilynn