2017-05-27 41 views
0

我試圖一個小插曲適用於圖片,但由於某種原因,我得到的錯誤OpenCV的錯誤:輸入參數大小不匹配

OpenCV的錯誤:輸入參數大小不匹配(操作既不是「數組運算陣列」(其中陣列具有相同的尺寸和相同數量的信道)

+(UIImage *)vignetteImage:(UIImage *)image { 
Mat inputImage; 
UIImageToMat(image, inputImage); 

Mat kernelX = getGaussianKernel(inputImage.cols, 50); 
Mat kernelY = getGaussianKernel(inputImage.rows, 50); 
Mat kernelXTranspose; 
transpose(kernelX, kernelXTranspose); 
Mat kernel = kernelY * kernelXTranspose; 

Mat mask, processedImage; 
normalize(kernel, mask, 0, 1, NORM_MINMAX); 
inputImage.convertTo(processedImage, CV_64F); 
multiply(mask, processedImage, processedImage); 
convertScaleAbs(processedImage, processedImage); 

return MatToUIImage(processedImage); 

}

拋出該生產線是

multiply(mask, processedImage, processedImage);

我不明白,因爲我正在拍攝相同的圖像並將其應用於自身。所以數組應該匹配?

回答

0

我發現了錯誤 - 我需要將圖像轉換第一灰度圖,否則排墊內核是不同的大小比圖像的我想轉換:

+(UIImage *)vignetteImage:(UIImage *)image { 
Mat inputImage; 
UIImageToMat(image, inputImage); 

// Transform the cv::Mat color image to grayscale 
Mat grayMat; 
cvtColor(inputImage, grayMat, CV_BGR2GRAY); 

Mat kernelX = getGaussianKernel(grayMat.cols, 50); 
Mat kernelY = getGaussianKernel(grayMat.rows, 50); 
Mat kernelXTranspose; 
transpose(kernelX, kernelXTranspose); 
Mat kernel = kernelY * kernelXTranspose; 

Mat mask, processedImage; 
normalize(kernel, mask, 0, 1, NORM_MINMAX); 
grayMat.convertTo(processedImage, CV_64F); 
multiply(mask, processedImage, processedImage); 
convertScaleAbs(processedImage, processedImage); 

return MatToUIImage(processedImage); 
} 
相關問題