2013-02-02 45 views
1

我嘗試使用teh cvBlob lib進行blob檢測,在opencv下的Ubuntu但我在開始時被阻止。當我嘗試編譯的例子在那裏形成的網站:cvBlob示例不工作cvLabel

#include <cv.h> 
#include <highgui.h> 
#include <stdio.h> 
#include "cvblob.h" 

using namespace cvb; 
using namespace std; 

int main(int argc,char** argv){ 
    if(argv[1] == NULL){ 
     printf("\n Please Provide a valid Argument \n"); 
     return(0); 
    } 
    else{ 
     IplImage* src = cvLoadImage(argv[1],CV_LOAD_IMAGE_UNCHANGED); 
     cvNamedWindow("Original",CV_WINDOW_AUTOSIZE); 
     cvShowImage("Original",src); 
    IplImage src_g; 
    cvThreshold(src, src_g,35,255, CV_THRESH_BINARY); 
    IplImage *labelImg=cvCreateImage(cvGetSize(src_g), IPL_DEPTH_LABEL, 1); 
    CvBlobs blobs; 
    unsigned int result=cvb::CvLabel(src_g, labelImg, blobs); 
    cvRenderBlobs(labelImg, blobs, src, src); 
    for (CvBlobs::const_iterator it=blobs.begin(); it!=blobs.end(); ++it) 
    { 
     cout << "Blob #" << it->second->label << ": Area=" << it->second->area << ", Centroid=(" << it->second->centroid.x << ", " << it->second->centroid.y << ")" << endl; 
    } 
    cvNamedWindow("Mod", CV_WINDOW_AUTOSIZE); 
    cvShowImage("Mod", src); 
    cvWaitKey(0); 
     cvReleaseImage(&src); 
     cvReleaseImage(&src_g); 
     cvDestroyWindow("Image"); 
     return(0); 
    } 

} 

我得到這個錯誤此生unsigned int result=cvb::CvLabel(src_g, labelImg, blobs);

home/rrg/OpenCV-2.4.3/release/bagDetect/main.cpp: In function ‘int main(int, char**)’: 
/home/rrg/OpenCV-2.4.3/release/bagDetect/main.cpp:28: error: functional cast expression list treated as compound expression 
/home/rrg/OpenCV-2.4.3/release/bagDetect/main.cpp:28: error: invalid cast from type ‘cvb::CvBlobs’ to type ‘cvb::CvLabel’ 
make[2]: *** [CMakeFiles/bag.dir/main.o] Error 1 
make[1]: *** [CMakeFiles/bag.dir/all] Error 2 
make: *** [all] Error 2 

我不知道應該是什麼問題!

在第一個答案中提到的修改之後,我得到一個鏈接錯誤:(

Linking CXX executable bag 
CMakeFiles/bag.dir/main.o: In function `main': 
main.cpp:(.text+0x103): undefined reference to `cvLabel' 
main.cpp:(.text+0x134): undefined reference to `cvRenderBlobs' 
collect2: ld returned 1 exit status 

什麼,在哪裏我應該把被認可上述(CMakeList或Makefile文件)

回答

1

的功能?有在你的代碼,它產生你的這些錯誤的兩點錯別字: - 的IplImage src_g; - >應被宣佈爲指針 - unsigned int的結果= CVB :: CvLabel(src_g,labelImg,斑點); - - >使用的,而不是CvLabel()

希望這有助於 TL

+1

哦,上帝cvLabel(),U是對的,但是現在我有一個類似的問題在我的其他職位的人提了......我也添加到這一個。 – Elod

+0

嗨@ Elod,關於鏈接:我設法鏈接:'gcc main.cpp'pkg-config --cflags opencv' -o測試'pkg-config cvblob opencv --libs''。在選項列表末尾加上--libs是一個好習慣。問候,TL – tlelente