2011-10-06 148 views
4

當我調用該函數cvGoodFeaturesToTrack發現哈里斯的角落我得到這個錯誤:的OpenCV:錯誤使用功能cvGoodFeaturesToTrack

OpenCV Error: Assertion failed (src.type() == CV_8UC1 || src.type() == CV_32FC1) in cornerEigenValsVecs, file /build/buildd/opencv-2.1.0/src/cv/cvcorner.cpp,line 254 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /build/buildd/opencv-2.1.0/src/cv/cvcorner.cpp:254: error: (-215) src.type() == CV_8UC1 || src.type() == CV_32FC1 in function cornerEigenValsVecs 

Aborted 

它正確編譯,但是當我嘗試運行它,它給了我這個錯誤。

下面是代碼:

IplImage* eig_image = 0; 
IplImage* temp_image = 0; 

IplImage *img1 = 0; 

img1 = cvLoadImage("im1.pgm"); 
if(img1==0) { 
    printf("oh no!"); 
} 

eig_image = cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F, 1); 

temp_image = cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F, 1); 


const int MAX_CORNERS = 100; 
CvPoint2D32f corners[MAX_CORNERS] = {0}; 
int corner_count = MAX_CORNERS; 
double quality_level = 0.1; 
double min_distance = 1; 
int eig_block_size = 3; 
int use_harris = true; 
double k = .4; 

cvGoodFeaturesToTrack(img1, eig_image, temp_image,corners,&corner_count,quality_level,min_distance,NULL,eig_block_size,use_harris,k); 

這究竟是爲什麼以及如何解決呢?我感謝任何幫助!

回答

9

OpenCV試圖告訴您,您傳遞給cvGoodFeaturesToTrack()的錯誤(錯誤實際上是源自輔助函數cornerEigenValsVecs())中的一個不是所需的類型CV_8UC1或CV_32FC1。

我懷疑img1可能不是您所需要的類型。 img1矩陣的類型是什麼?如果它是彩色的,那麼它可能是CV_8UC3型。考慮使用cvCvtColor使其成爲灰度圖像。

,或者你可以先加載圖像爲灰度,如:

cvLoadImage("im1.pgm", CV_LOAD_IMAGE_GRAYSCALE); 
+0

謝謝!這工作。這很奇怪,因爲我使用的圖像是從不同的功能剩下的,它被灰度化並保存。也許我錯了,但不管它現在工作。 – Choobs

+0

很高興能幫到你!有時圖像可能會看起來灰度,但最終會以R = G = B =強度值的形式保存爲RGB圖像。這可能是發生了什麼事。保存圖像時,確保它們是8位灰度。 – mevatron