首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VS2010使用OpenCV 出现“error LNK2019: 无法解析的外部符号 _cvThreshold”解决方案

2012-03-02 
VS2010使用OpenCV 出现“error LNK2019: 无法解析的外部符号 _cvThreshold”错误:Difference.obj : error LN

VS2010使用OpenCV 出现“error LNK2019: 无法解析的外部符号 _cvThreshold”
错误:
Difference.obj : error LNK2019: 无法解析的外部符号 _cvThreshold,该符号在函数 _main 中被引用
1>Difference.obj : error LNK2019: 无法解析的外部符号 _cvCvtColor,该符号在函数 _main 中被引用
1>e:\visual studio 2010\Projects\Difference\Debug\Difference.exe : fatal error LNK1120: 2 个无法解析的外部命令

C/C++ code
#include <cv.h>#include <highgui.h>#include <cxcore.h>#include <math.h>#include <iostream>using namespace std;int char2int(char x);int main(){    int m=0;    int i,j;    CvCapture* capture;         capture = cvCaptureFromFile("F:/Clip2.avi"); //Laboratory_raw campus highwayI_raw  campus     int Image_width=(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH );   //读取视频的宽    int Image_height=(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT ); //读取视频的高    CvSize imgSize;                                                                 //定义图像大小        imgSize.width=Image_width;        imgSize.height=Image_height;    if(!capture)    {        cout<<"error"<<endl;        return -1;    }        IplImage* image= cvCreateImage(imgSize, IPL_DEPTH_8U,3);       IplImage* image1= cvCreateImage(imgSize, IPL_DEPTH_8U,3);     IplImage* image2= cvCreateImage(imgSize, IPL_DEPTH_8U,3);    IplImage* image3= cvCreateImage(imgSize, IPL_DEPTH_8U,3);     IplImage* fr1= cvCreateImage(imgSize, IPL_DEPTH_8U,1);               IplImage* fr2= cvCreateImage(imgSize, IPL_DEPTH_8U,1);                   IplImage* fr3 = cvCreateImage(imgSize, IPL_DEPTH_8U,1);          IplImage* res1 = cvCreateImage(imgSize, IPL_DEPTH_8U,1);         IplImage* res2 = cvCreateImage(imgSize, IPL_DEPTH_8U,1);      IplImage* res = cvCreateImage(imgSize, IPL_DEPTH_8U,1);          image->origin=1;    image2->origin=1;    image3->origin=1;    res->origin=1;    cvNamedWindow("res",1);    cvNamedWindow("image",3);        cvNamedWindow("image2",3);        cvNamedWindow("image3",3);         for(;;)    {   cout<<m<<endl;             //新的读进来            cvZero(res1);                     //清除上一次结果        cvZero(res2);        cvZero(res);        cvCopy(fr2,fr3,NULL);             //传递图像                         cvCopy(fr1,fr2,NULL);         cvCopy(image2,image3,NULL);        cvCopy(image,image2,NULL);        image = cvQueryFrame( capture );                                                  cvCvtColor(image,fr1, CV_BGR2GRAY);    //彩色变灰度                                          cvAbsDiff(fr1,fr2,res1);             //差分                                             cvThreshold(res1, res1, 10, 255, CV_THRESH_BINARY);     //阈值划分               cvAbsDiff(fr2,fr3,res2);        cvThreshold(res2, res2, 10, 255, CV_THRESH_BINARY);        for(j=0;j<Image_height;j++)        {            for(i=0;i<Image_width;i++)            {                if(char2int(*(res1->imageData+j*Image_width+i))==255&&                         char2int(*(res2->imageData+j*Image_width+i))==255)                {                     *(res->imageData+j*Image_width+i)=255;//这是利用三幅图的帧差法,这句话的意思是如果res1和res2都是 白色的情况下,res才是白色。为了更加准确的得到前景区域。                }            }        }        cvShowImage("res",res);          cvShowImage("image",image);        cvShowImage("image2",image2);        cvShowImage("image3",image3);//显示                                                 cvWaitKey(1);           //                m++;//每行起始的帧编号    }  return 0;}int char2int(char x)//通过逻辑运算将字符型数据转换为整型{int t=255;    t=t&x;    return(t);}


[解决办法]
另外如果是封装在DLL中,注意函数的导出。
即编译OpenCV动态库时,注意其头文件中的宏控制:导致相应符号才能正确链接。
------解决方案--------------------


就是库没有连接成功。

热点排行