【问题标题】:Error LNK1120 Solved After Removing Some Header, But Then There Is Another Error(Error error C3861: 'cvPyrSegmentation': identifier not found )删除某些标头后解决了错误 LNK1120,但随后出现另一个错误(错误错误 C3861:'cvPyrSegmentation':找不到标识符)
【发布时间】:2013-12-31 03:46:04
【问题描述】:

实际上下面的代码是我试图执行的。当我尝试使用 Microsoft Visual Studio 2012 执行此操作时,出现错误。

错误错误LNK2019:函数“void __cdecl START_SEGMENT(int)”(?START_SEGMENT@@YAXH@Z)中引用的未解析的外部符号_cvPyrSegmentation (?START_SEGMENT@@YAXH@Z)

错误错误 LNK1120:1 个未解决的外部问题

但我让我的朋友使用他的笔记本电脑执行此代码,它工作得很好。没有错误。但是他使用的是 Microsoft Visual Studio 2010 而不是我使用 Visual Studio 2012。我想知道为什么我执行此代码时会出错,但当我的朋友执行它时却没有错误。

所以我删除了一些标题,编码看起来像我从一开始就要求的那个(来自这个Question。那个带有“”错误错误C3861:'cvPyrSegmentation':找不到标识符“”.. 删除一些标题后,不再有错误 LNK1120。但是有“”Error error C3861: 'cvPyrSegmentation': identifier not found“”...

Blank ...对于新手来说错误太多。学习过程从来都不是一件容易的事。yeahhh!

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/legacy/legacy.hpp>
#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

【问题讨论】:

  • 检查并添加必要的库。比如 - "C:\Program Files\OpenCV\lib\cv.lib“ "C:\Program Files\OpenCV\lib\cvaux.lib“ "C:\Program Files\OpenCV\lib\cxcore.lib“ "C: \Program Files\OpenCV\lib\cvcam.lib“ "C:\Program Files\OpenCV\lib\highgui.lib"

标签: visual-studio syntax-error


【解决方案1】:

解决了您的编译问题,您现在遇到了链接器问题。

您需要按照 OpenCV 文档中的说明了解如何将他们的库链接到您的二进制文件。

您将从-lcv 开始,并且可能需要添加一些额外的库。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多