2013-12-17 3 views
0

iOS에서 OpenCV를 사용하여 2 개의 이미지 사이의 이동을 감지하려고합니다. 내가 사용한 함수는 phaseCorrelate이고, 주어진 Point2d가 2 cv::Mat 인 이미지이다. UIImage를 Mat으로 변환하여 here 샘플 코드를 따른 다음 MatCV_32F 유형으로 변환합니다. 그러나 나는이 오류가에 보관 : 그 오류가 발생했습니다 왜 CV_32F에 매트 유형을 전환했기 때문에 나는 이해가 안iOS 및 OpenCV 오류 : PhaseCorrelateRes에서 어설 션 실패

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 

. 참고로 : 내가 CV_64F로 변환하지 않은 이유는 거대한 메모리 비용과 iOS의 앱이 과도한 메모리 때문에 즉시 닫힐 것이기 때문입니다.

#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 

답변

0

신경 끄시 고,이 실제로있는 UIImage가 처음에 3 개 채널을 가지고 있다는 사실에 의해 발생되었다

여기 (phaseCorrelate 통화에서) 오류가 발생 내 코드의 조각입니다. Mat 및 CV_32F 유형으로 변환 될 때, 결과 Mat는 실제로 CV_32FC3 유형 (3 개 채널)이었습니다. 따라서 매개 변수 유형이 일치하지 않으므로 오류가 발생했습니다.

내 용액이 채널의 배열로 일본어 매트 분할 된 다음 만 phaseCorrelate 함수에 하나 개의 채널을 통과 :

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