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

afunlee 2011-04-10 07:43:54
错误:
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 个无法解析的外部命令


#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);
}
...全文
15713 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
工长山 2013-05-27
  • 打赏
  • 举报
回复
前面加上 using namespace cv;
gaozhenhua1 2013-03-14
  • 打赏
  • 举报
回复
同求解决啊,楼主大人救命啊
feidanbo 2012-07-05
  • 打赏
  • 举报
回复 2
打开VC++ 2008 Express,创建一个Win32控制台程序opencvhello;
选择Solution Explorer里的opencvhello项目,点击鼠标右键,选择Properties,在[链接器 LINKER]的[输入INPUT]中:
为项目的Debug配置增加 [依赖的库 Additional Dependencies]:cxcore200d.lib cv200d.lib highgui200d.lib(注意,文件名cv200d.lib 可能是cv***d.lib等形式,具体应查看D:\Program Files\OpenCV2.0\vc2008\lib。如果使用的是OpenCV2.1,应输入:cxcore210d.lib cv210d.lib highgui210d.lib )
为项目的Release配置增加[依赖的库 Additional Dependencies]:cxcore200.lib cv200.lib highgui200.lib (注意:如果使用的是OpenCV2.1,应输入:cxcore210.lib cv210.lib highgui210.lib)
在 [配置属性 Configuration Properties]- [General] -[字符集 Character Set] 修改为使用“多字节字符集” (由于2008默认是以Unicode字符集编译的)
编译运行
opencv1215 2011-12-30
  • 打赏
  • 举报
回复 1
请问楼主你是怎么解决的啊?我也遇到相同的问题了,库的配置都正确,但是运行一直出错
fireflypd 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 afunlee 的回复:]
引用 4 楼 loaden 的回复:
另外如果是封装在DLL中,注意函数的导出。
即编译OpenCV动态库时,注意其头文件中的宏控制:导致相应符号才能正确链接。

我自己搞定啦~就是要在原来的库的基础上+opencv_core220d.lib;opencv_highgui220d.lib;opencv_imgproc220d.lib;
[/Quote]
怎么加?格式是什么啊?谢谢。。我也遇到了这个问题。。。
afunlee 2011-04-10
  • 打赏
  • 举报
回复
额~最后说句,谢谢两位啦~~~虽然没实际帮到咱哈~但间接帮上了~
afunlee 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pathuang68 的回复:]
就是库没有连接成功。
[/Quote]
嗯~提问前就知道了啊——就是忘记去看cvThreshold的定义文件了- -所以一直没找到库...
afunlee 2011-04-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loaden 的回复:]
另外如果是封装在DLL中,注意函数的导出。
即编译OpenCV动态库时,注意其头文件中的宏控制:导致相应符号才能正确链接。
[/Quote]
我自己搞定啦~就是要在原来的库的基础上+opencv_core220d.lib;opencv_highgui220d.lib;opencv_imgproc220d.lib;
pathuang68 2011-04-10
  • 打赏
  • 举报
回复
就是库没有连接成功。
老邓 2011-04-10
  • 打赏
  • 举报
回复
另外如果是封装在DLL中,注意函数的导出。
即编译OpenCV动态库时,注意其头文件中的宏控制:导致相应符号才能正确链接。
老邓 2011-04-10
  • 打赏
  • 举报
回复
把opencv_core220d.lib;opencv_highgui220d.lib;opencv_video220d.lib;放在系统lib的后面试试。
afunlee 2011-04-10
  • 打赏
  • 举报
回复
opencv_core220d.lib;opencv_highgui220d.lib;opencv_video220d.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)

都有啊~
老邓 2011-04-10
  • 打赏
  • 举报
回复
原因是这个函数cvThreshold中链接了其他库。
而你却没有链接他们。
尝试加入:
kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧