[图文教程]VS2017搭建opencv & C++ 开发环境

本文详细介绍了如何在Visual Studio 2017中安装和配置OpenCV 3.4.2版本,包括环境变量设置、工程创建、库文件及目录添加等步骤,并通过一个简单的图片读取和显示代码示例验证安装成功。

首先从官网下载OpenCV最新版本

截至我写这文章,4.0已经发布预览版了,不过在这是没有的,只能用3.4.2:
https://opencv.org/releases.html

一:安装

安装过程不做细解,照着提示做即可
481370-20180813164143246-469404844.png
安装完成,找到这个目录
481370-20180813164419647-1813954660.png
添加到环境变量Path
481370-20180813164556502-49211583.png

二:创建工程

1. 新建个C++工程

打开VS2017新建一个C++工程
481370-20180813164942934-109176203.png

2. 配置

有些属性需要配置
481370-20180813165034694-565443580.png

3. 添加文件

添加一个文件用于写代码
481370-20180813165324276-1518327716.png

4. 包含OpenCV的include和lib

打开项目属性,到x64这里选"编辑"
481370-20180813165814894-1076595409.png
添加这3个目录(请在之前安装的opencv目录里找)
481370-20180813170122846-1281451641.png
库目录也添加一下
481370-20180813170341361-835369738.png
连接器也要
481370-20180813171304143-2104902328.png
最后添加lib文件,注意这里要区分debug和release
添加的文件一个文件名是带d一个是不带的
481370-20180813172438112-1112987452.png

三:编辑代码验证

#include <iostream>
#include <string> 
#include <Windows.h>
#include  <direct.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

/*
* Comments:获取程序运行路径
* Param bool contain_filename :是否包含文件名
* @Return string :程序运行路径
*/
string GetProgramDir(bool contain_filename)
{
    char exeFullPath[MAX_PATH]; // Full path
    string strPath = "";
    GetModuleFileNameA(NULL, exeFullPath, MAX_PATH);
    strPath = (string)exeFullPath;    // Get full path of the file
    int pos = strPath.length();
    if (!contain_filename)pos = strPath.find_last_of('\\', strPath.length());
    return strPath.substr(0, pos);  // Return the directory without the file name
}

int main()
{
    string runpath = GetProgramDir(false);
    Mat img = imread(runpath + "/1.png");//加载图片
    if (img.empty())
    {
        printf("读取图片失败!\n");
        system("pause");
        return 0;
    }
    imshow("", img);//显示出来
    waitKey(0);//等待用户按键继续
    img.release();//释放资源
    return 0;
}

四:运行试试

481370-20180813181617711-1565245867.png

转载于:https://www.cnblogs.com/DragonStart/p/9470002.html

OpenCV小项目 这是一个个人在使用OpenCV过程中写的一些小项目,以及一些非常有用的OpenCV代码,有些代码是对某论文中的部分实现。 注意:代码是在Xcode里写的,如果要在win下测试,遇到问题自己修改。 opencv-rootsift-py 用python和OpenCV写的一个rootsift实现,其中RootSIFT部分的代码参照Implementing RootSIFT in Python and OpenCV这篇文章所写,通过这个你可以了解Three things everyone should know to improve object retrieval这篇文章中RootSIFT是怎么实现的。 sift(asift)-match-with-ransac-cpp 用C++OpenCV写的一个图像匹配实现,里面包含了采用1NN匹配可视化、1NN匹配后经RANSAC剔除错配点可视化、1NN/2NN&lt;0.8匹配可视化、1NN/2NN&lt;0.8经 RANSAC剔除错配点可视化四个过程,其中1NN/2NN&lt;0.8匹配过程是Lowe的Raw feature match,具体可以阅读Lowe的Distinctive image features from scale-invariant keypoints这篇文章。这个对图像检索重排非常有用。另外里面还有用OpenCV写的ASIFT,这部分来源于OPENCV ASIFT C++ IMPLEMENTATION,ASIFT还可以到官网页面下载,ASIFT提取的关键点 比SIFT要多得多,速度非常慢,不推荐在对要求实时性的应用中使用。 更多详细的分析可以阅读博文SIFT(ASIFT) Matching with RANSAC。 有用链接 OpenCV3.0文档 // 测试sparse unsigned int centersNum = 10; vector descrNums; descrNums.push_back(8); descrNums.push_back(12); //unsigned int T[] = {1, 2, 1, 3, 2, 5, 4, 3, 10, 5; 4, 2, 6, 5, 2, 5, 4, 6, 2, 4}; unsigned int T[] = {1, 2, 1, 3, 2, 5, 4, 3, 10, 5, 4, 2, 6, 5, 2, 5, 4, 6, 2, 4}; sp_mat Hist(descrNums.size(), centersNum); static long int count = 0; for (int i = 0; i &lt; descrNums.size(); i++){ unsigned int* desrcElementsTmp = new unsigned int[descrNums[i]]; memcpy(desrcElementsTmp, T + count, descrNums[i] * sizeof(T[0])); //cout &lt;&lt; desrcElementsTmp[0] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[1] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[2] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[3] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[4] &lt;&lt; &#39;\t&#39; &lt;&lt;endl; //cout &lt;&lt; desrcElementsTmp[5] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[6] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[7] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[8] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[9] &lt;&lt; &#39;\t&#39; &lt;&lt; desrcElementsTmp[10] &lt;&lt; &#39;\t&#39; &lt;&lt;endl; //cout &lt;&lt; endl; sp_mat X(1, centersNum); X.zeros(); for (int j = 0; j &lt; descrNums[i]; j++){ X(0, desrcElementsTmp[j]-1) += 1; } X.print(&quot;X:&quot;); X = X/norm(X, 2); Hist.row(i) = X; count = count + descrNums[i]; delete desrcElementsTmp; } //Hist.print(&quot;Hist:&quot;);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值