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

环境: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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值