VS+Opencv 新库导入过程(以AVS视频解码库导入为例)

来源:互联网 发布:淘宝首页模板怎么制作 编辑:程序博客网 时间:2024/06/06 01:35

环境:VS2010+opencv2410
这里只要VS与Opencv能配置起来就行,在Opencv配置VS的时候,不是所有opencv版本与所有vs版本都能配置成功的。安装好Opencv之后,在安装目录下的opencv/build/x86(这个是跟你电脑系统版本有关的,如果你的电脑是64位的,就该选择x86,同理,32位的该选x64),在这个文件夹里,找与你vs匹配的文件,比如:vc10—>vs2010, vc11—>vs2012, vc12—>vs2103,这里在配置环境变量的时候,一定不能搞错,不要抱侥幸心理,在安装的opencv文件的没有找到对应vs的版本,就随便凑合选择一个vc文件,这样安装好后,你会发现你的opencv库是没用的!!
假如,现在环境已经搭好了,接下来进入正题。
一 新库导入步骤:
(1)新建一个项目,将要导入的库文件放在与该项目同目录的文件夹中。比如:
这里写图片描述
我新建了一个AVS1的项目,则在我vs的projects中就会自动生成一个AVS1文件,该文件里面就有存储所有新建项目的相关内容。此时,将要导入的新库文件全部放在一个文件夹中,放在此目录下,我都放在了ku文件中了。
这里写图片描述
此外还要将库文件的.lib文件放在另一个文件中,我放在了Dubug文件中了。
(2)配置项目属性,将新库文件加载到你的项目中。
①将你新库文件路径添加到附加包含目录中。
这里写图片描述
这里写图片描述
②将新库的.lib文件路径添加到附加库目录中。
这里写图片描述
这里写图片描述
③将新库的.lib文件添加到附加依赖项中。
这里写图片描述
(3)将头文件与源文件都添加进来。
这里写图片描述
(4)将新库导进来,编写程序,实现功能。

#include "stdafx.h"#include "VideoCaptureBase.h"#include "AVSVideoCapture.h"#include <iostream>#include <fstream>#include <string>#include "highgui.h"using namespace cv;using namespace std;int main(){    AVSVideoCapture capture;    VideoCaptureBase* videoCapture=&capture;    if (-1 == videoCapture->open(("C:/Users/jia/Desktop/1.avs")))    {        //cout << "Can not open video: " << path << endl;        return -1;    }    int frame=0;    namedWindow("show");    while(1)    {        cv::Mat oneFrame;        std::cout<<frame<<endl;        if(videoCapture->getNextFrame(oneFrame)==-1)            break;        cv::imshow("show",oneFrame);        cvWaitKey(1);        frame++;    }    //return 1;   capture.close();   destroyWindow("show");   return 1;}

二 新库导入过程中的坑,以及解决:
(1)fatal error C1010: 在查找预编译头时遇到意外的文件结尾,是否忘记了向源中添加“#include “StdAfx.h””?如下图所示:
这里写图片描述
而此时,你在头文件中明明已经添加了#include “StdAfx.h”(最好放在第一位)。
Solve:设置新加的库的.cpp文件属性中的预编译头。将使用(/Yu)改为不使用预编译头
这里写图片描述
因为,一般新加的库.cpp文件中,并不是由#include “StdAfx.h”当开头的头文件,所以,这种情况下,就应当将预编译头设置成不使用,不然就会与使用预编译头文件为#include “StdAfx.h”冲突,以致报错。
(2)error LNK2019: 无法解析的外部符号_avsGetCaptureProperty,该符号在函数”public: virtual int __thiscall AVSVideoCapture::open(class std::basic_string…) 中被调用
如下图所示:
这里写图片描述
Solve:这种情况生成的原因有多种,得因情况而定。这里我就只分析我遇到的这一种。根据报错,很容易理解,这是因为变量在未声称前被调用的情况。然后根据报错,找到报错的函数,以及对应函数报错的变量,选中该变量,右击选择转到定义,如果能转过去就不会报错了。
这里写图片描述
而这里报错的这四个变量,是因为这四个变量在C文件中声明过,而现在用在了C++文件中,所以,不能直接用int avsCreateCapture()调用,要写成extern “C” int avsCreateCapture(),所以,这里的C文件,需要放到与库文件一个目录下,在我这也就是要放在ku文件夹中,然后需要加载到头文件中,才能起作用。
这里写图片描述
(3)fatal error C1853: “°Debug\AVS1.pch”预编译头文件来自编译器的早期版本,或者预编译头为C++而在C中使用(或相反)。
这里写图片描述
Solve:解决方法与(1)一样,新添加的C文件的预编译有也要设置为不使用(换言之,只要是预编译头不是#include “StdAfx.h”的,都要设置成不使用)。

阅读全文
0 0
原创粉丝点击