簡體   English   中英

iOS和OpenCV錯誤:斷言在PhaseCorrelateRes中失敗

[英]iOS & OpenCV Error: Assertion Failed in PhaseCorrelateRes

我正在嘗試使用iOS中的OpenCV檢測2張圖像之間的偏移。 我使用的函數是phaseCorrelate,在給定2個cv::Mat圖像的情況下,該函數應該返回Point2d。 我在這里遵循示例代碼,將UIImage轉換為Mat,然后將Mat轉換為CV_32F類型。 但是我一直收到這個錯誤:

OpenCV Error: Assertion failed (src1.type() == CV_32FC1 || src1.type() == CV_64FC1) in            phaseCorrelateRes, file /Users/alexandershishkov/dev/opencvIOS/opencv-2.4.7/modules/imgproc/src/phasecorr.cpp, line 498
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Users/alexandershishkov/dev/opencvIOS/opencv-2.4.7/modules/imgproc/src/phasecorr.cpp:498: error: (-215) src1.type() == CV_32FC1 || src1.type() == CV_64FC1 in function phaseCorrelateRes

我不明白為什么會收到該錯誤,因為我已將Mat類型轉換為CV_32F 僅供參考:我之所以沒有轉換為CV_64F,是因為它占用了巨大的內存,而iOS中的應用會由於內存過多而立即關閉。

這是發生錯誤的代碼片段(在phaseCorrelate調用中):

#ifdef __cplusplus
-(void)alignImages:(NSMutableArray *)camImages
{
int i;
Mat matImages, refMatImage, hann;
Point2d pcPoint;

for (i = 0; i < [camImages count]; i++) {
    if(i == 0){
        UIImageToMat([camImages objectAtIndex:i], refMatImage);
        refMatImage.convertTo(refMatImage, CV_32F);
        createHanningWindow(hann, refMatImage.size(), CV_32F);
    }
    else{
        UIImageToMat([camImages objectAtIndex:i], matImages);
        matImages.convertTo(matImages, CV_32F);

        pcPoint = phaseCorrelate(refMatImage, matImages, hann);
        NSLog(@"phase correlation points: (%f,%f)",pcPoint.x, pcPoint.y);
    }
}
NSLog(@"Done Converting!");
}
#endif

沒關系,這實際上是由UIImage首先具有3個通道的事實引起的。 當轉換為Mat並轉換為CV_32F類型時,生成的Mat實際上是CV_32FC3類型(3個通道)。 因此,由於參數類型不匹配而發生錯誤。

我的解決方案是將原始Mat拆分為通道數組,然后僅將一個通道傳遞給phaseCorrelate函數:

vector<Mat> refChannels;
split(refMatImage, refChannels);
phaseCorrelate(refChannels[0],...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM