2013-12-12 61 views
0

您能否幫助我?在下面執行編碼時出錯。我是一個使用OpenCV的新手。我的老師是谷歌先生和你們在這個領域的專家。錯誤錯誤C3861:'cvPyrSegmentation':標識符未找到

智能感知:標識符 「cvPyrSegmentation」 未定義

錯誤錯誤C3861: 'cvPyrSegmentation':找不到

#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include <stdlib.h> 
#include <stdio.h> 


static void help(void) 
{ 
    printf("\nThis program present the function of pyramid segmentation which is 
     cvcvPyrSegmentation()\n""we can controlled the value of threshold by creating 
     the taskbar\n""Usage :\n");    
} 

IplImage* image[2] = { 0, 0 }, *image0 = 0, *image1 = 0; 
CvSize size; 

int w0, h0,i; 
int threshold1, threshold2; 
int l,level = 4; 
int sthreshold1, sthreshold2; 
int l_comp; 
int block_size = 1000; 
float parameter; 
double threshold; 
double rezult, min_rezult; 
int filter = CV_GAUSSIAN_5x5; 
CvConnectedComp *cur_comp, min_comp; 
CvSeq *comp; 
CvMemStorage *storage; 

CvPoint pt1, pt2; 



static void START_SEGMENT(int a) 
{ 
    (void) a; 
    cvPyrSegmentation (image0, image1, storage, &comp, level, threshold1+1, 
    threshold2+1); 

    cvShowImage("Segmentation", image1); 
} 

int main(int argc, char** argv) 
{ 
    char* filename; 

    help(); 

    filename = argc == 2 ? argv[1] : (char*)"C:/Users/acer/Documents/Visual Studio 
    2012/Projects/me2.jpg"; 

    if((image[0] = cvLoadImage(filename, 1)) == 0) 
{ 
    help(); 
    printf("Cannot load fileimage - %s\n", filename); 
    return -1; 
} 


    cvNamedWindow("Source", 0); 
    cvShowImage("Source", image[0]); 

    cvNamedWindow("Segmentation", 0); 

    storage = cvCreateMemStorage (block_size); 

    image[0]->width &= -(1<<level); 
    image[0]->height &= -(1<<level); 

    image0 = cvCloneImage(image[0]); 
    image1 = cvCloneImage(image[0]); 
    // segmentation of the color image 
    l = 1; 
    threshold1 =255; 
    threshold2 =30; 

    START_SEGMENT(1); 

    sthreshold1 = cvCreateTrackbar("Threshold1", "Segmentation", &threshold1, 255, 
    START_SEGMENT); 
    sthreshold2 = cvCreateTrackbar("Threshold2", "Segmentation", &threshold2, 255, 
    START_SEGMENT); 

    cvShowImage("Segmentation", image1); 
    cvWaitKey(0); 

    cvDestroyWindow("Segmentation"); 
    cvDestroyWindow("Source"); 

    cvReleaseMemStorage(&storage); 

    cvReleaseImage(&image[0]); 
    cvReleaseImage(&image0); 
    cvReleaseImage(&image1); 

    return 0; 
} 

#ifdef _EiC 
main(1,"pyramid_segmentation.c"); 
#endif 
+0

當您編譯代碼或運行代碼時,是否出現此錯誤? – randomusername

+0

您是否將正確的鏈接標誌傳遞給編譯器? – randomusername

+0

當我試圖「構建解決方案」時得到這個錯誤...當然,如果有錯誤,我不能運行它。你知道我的編碼有什麼問題嗎? – ApipNate

回答

1

您不包括正確的頭,用的東西看起來標識符。

#include <opencv2/imgproc/imgproc_c.hpp> 
+0

除非該函數被定義爲一個宏,它不應該引發致命的異常。 – randomusername

+0

哪個標頭不正確?先生,你能幫我嗎? – ApipNate

+0

@randomusername:咦?沒有人會說「致命的例外」。 OP有一個編譯器錯誤,因爲他試圖使用的函數沒有在該範圍內聲明。 –

0

您的編譯器無法理解命令cvPyrSegmentation的含義。你的解決方案是:

  1. 該特定函數實際上並不存在,你正在閱讀錯誤的文檔(我無法在官方API中找到該函數)。

  2. 您可能會缺少一個頭文件。回到你正在遵循的例子,並按照他們的演示完全重做。如果你沒有遵循一個例子,找到一個;這幾乎總是解決問題的最佳方式。

  3. 您可能會錯過許多必須傳遞給編譯器的標誌。如果你熟悉使用庫,你會明白我的意思。如果您不熟悉在C中使用庫,請首先查看如何使用非常簡單的庫。我建議GMP。

如果找不到示例,請留下評論,我會一次性編輯一個,我找到一個。

+1

[參考](http://www.seas.upenn.edu/~bensapp/opencvdocs/ref/opencvref_cv.htm)。 –

+0

@LightnessRacesinOrbit然後我立即糾正。除非OP使用與該文檔不匹配的OpenCV版本。 – randomusername

0

add #include<cvaux.h>其中函數cvPyrSegmentation所在。

PS:被列入爲保證所有文件...

#include<cv.h> 
#include <cvaux.h> 
#include <opencv\cxcore.hpp> 
#include <opencv.hpp> 
#include <nonfree.hpp> 
#include <core/core.hpp> 
#include <imgproc/imgproc.hpp> 
#include <imgproc/imgproc_c.h> 
#include <highgui.h> 
0

您需要: 1)首先包括legacy.hpp(通常在opencv2 /傳統/ legacy.hpp)

2)確保legacy.hpp位於鏈接器輸入的「附加依賴項」中(我假設您使用的是Visual C++)

相關問題