我在Mac上使用OpenCV下面的代碼。以下函數從另一個函數接收圖像文件的路徑,並且工作正常。然而,cvExtractSURF拋出一個異常,指出:cvExtractSURF拋出異常,錯誤的輸入數組大小()在cvCreateSeq
OpenCV Error: Incorrect size of input array() in cvCreateSeq, file >/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarb>alls_ports_graphics_opencv/opencv/work/OpenCV-2.4.1/modules/core/src/datastructs.cpp, line 372 terminate called throwing an exception
的代碼如下:
- (int)extractFromImagePath:(NSString*)pathToFile{
[self.statusText setStringValue:@"image received"];
NSLog(@"Path: %@",pathToFile);
// Path: /Users/loco/Desktop/testimage.png
const char * path = [pathToFile UTF8String];
IplImage* image = cvLoadImage(path, CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat im = cv::imread(path,0);
if(im.data == NULL)
{
std::cout<<"Unable to read "<<path<<std::endl;
return 0;
}
/* extract the SURF keypoints/descriptors of an image */
// presumes a previously declared IplImage *image
CvSeq *keypoints = NULL;
CvSeq *descriptors = NULL;
CvMemStorage *storage = cvCreateMemStorage(0);
cvExtractSURF(image, NULL, &keypoints, &descriptors, storage, cvSURFParams(0, 600));
// OpenCV Error: Incorrect size of input array() in cvCreateSeq, file /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.4.1/modules/core/src/datastructs.cpp, line 372
// terminate called throwing an exception
[self.statusText setStringValue:@"writing to files"];
/* build a path to save a file in the documents directoy */
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docs = [paths objectAtIndex:0];
NSString *xmlpath_kp = [docs stringByAppendingPathComponent:@"keypoints.xml"];
NSString *xmlpath_desc = [docs stringByAppendingPathComponent:@"descriptors.xml"];
/* serialize to xml and save to disc */
cvSave([xmlpath_kp UTF8String], keypoints);
cvSave([xmlpath_desc UTF8String], descriptors);
[self.statusText setStringValue:@"done"];
/* don't forget your cleanup ;) */
cvReleaseImage(&image);
cvClearMemStorage(storage);
return 1;
}
會有人知道這是怎麼回事?任何幫助,將不勝感激!
能否以64位模式運行應用程序會成爲問題?另外,我將不得不重新編譯OpenCV。 – Tiago
這是2.4.0和2.4.1中的一個錯誤。應該在剛剛發佈的OpenCV 2.4.2中修復。 –
幹得好,你們確實在2.4.2中修復了它!感謝您的領導! – Tiago