使用VS2017 编写Linux系统上的Opencv程序
背景
之前写图像算法的程序都是在window10下使用VS编写,VS这个IDE结合“ImageWatch.vsix“插件,用于调试opencv相关的图像算法程序十分方便。后因项目需要,需将相关程序移植到Linux系统,才开始研究如何使用VS编写Linux上的Opencv程序。
一、Ubuntu安装相关库
0/先把ubuntu镜像源换成清华的
这样安装下载的速度会快些。
1/下载opencv cmake安装包
新建opencv文件夹,去opencv官网下载源文件,https://opencv.org/opencv-3-4.html,放入路径中;
新建cmaker文件夹,去Cmaker官网下载安装包,https://cmake.org/download/,放入路径中。
2/安装Cmake
因为可能需要联合编译,最好用最新版本,要图简单就直接sudo apt-get install cmake 。控制台输入:
./bootstrap
make -j3
sudo make install
- 1
- 2
- 3
3/安装依赖库
解压opencv安装包,并新建build文件夹,然后在build文件夹路径下安装依赖项,控制台输入:
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
- 1
4/安装opencv
配置cmake(简单的话可以cmake-gui ..然后依次点Configure和Generate按钮生成Configure文件),控制台输入:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_EIGEN=OFF -D WITH_TBB=ON -D WITH_V4L=ON -D CMAKE_INSTALL_PREFIX=/usr/local/opencv/340 ..
- 1
编译
sudo make -j3
- 1
安装
sudo make install -j3
- 1
5/配置lib库路径
在 /etc/ld.so.conf.d/ 路径下新建了 opencv.conf 文件(如已有该文件就不用新建了),
sudo gedit /etc/ld.so.conf.d/opencv.conf
- 1
打开该文件加入下面的内容:
/usr/local/opencv/340/lib
然后
sudo ldconfig /etc/ld.so.conf
- 1
6/环境变量
对所有用户有效修改/etc/profile文件
对个人有效则修改~/.bashrc文件
sudo gedit /etc/bash.bashrc
- 1
在文件末尾加上
export PKG_CONFIG_PATH=/usr/local/opencv/340/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv/340/lib
保存之后,再使用命令
source /etc/bash.bashrc
- 1
7/更新
sudo updatedb
- 1
8/检查opencv安装情况
pkg-config –modversion opencv
pkg-config –cflags opencv
pkg-config –libs opencv
9/小程序测试
使用opencv测试代码
cd到opencv-3.4.0/smaples/cpp/example_cmake目录下
cmake .
make
./opencv_example
- 1
- 2
- 3
即可看到打开了摄像头,在左上角有一个hello opencv 即表示配置成功.
自己编写代码测试
自己建立文件夹,写个简单的test1.cpp,然后控制台输入:
g++ test1.cpp -o test1 `pkg-config opencv --cflags --libs` -std=c++11
./test1
- 1
- 2
10/安装错了,就得卸载了重新安装
进入到build文件夹,控制台输入:
make uninstall
cd ..
sudo rm -r release
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv
- 1
- 2
- 3
- 4
二、VS新建Linux项目
Visual Studio 从2015开始,就开始支持Linux编程,VS2017更不用说(只要安装的时候注意安装跨平台Linux的模块即可)。相关的说明可上官网查看:https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/
打开VS,文件》新建》项目,选择Visual C++》跨平台》Linux》控制台应用程序。
VS会自动帮你写好一个main.cpp,此时直接按F5就能运行调试,然后需要你输入Linux系统的IP地址(可在Shell输入 ifconfig -a查询),Boot用户名,密码。
点击确定后,就能直接运行了。
这个时候在Linux系统的/home/下会新建projects文件夹,其中就有VS的新建项目文件夹。
三、VS项目链接Linux的头文件和外接opencv库
参考:http://www.cnblogs.com/dongc/p/6599461.html;https://www.cnblogs.com/reskai/p/7135586.html
主要都是项目属性中设置相关参数。
1/链接头文件
由于是在双系统下编程,头文件的作用如下:
- 在Windows系统下需要头文件来进行代码提示
- 在Linux系统下需要程序链接头文件
1-1 头文件用于代码提示
首先将Linux下相关的头文件复制到VS的Linux项目路径下,既可以直接鼠标点击复制,也可直接cmd下运行(前提system32下有pscp.exe)
pscp -r 用户名@UbuntuIP地址:/usr/include .
- 1
然后将/usr/local/opencv/340/include(与你之前安装opencv的设置有关)下的文件也拷贝到VS的工程目录下。
然后在项目属性中设置VC++目录》包含目录
1-2 头文件用于程序运行
程序是在Linux上运行的,也需要头文件,这里的头文件路径应是Linux系统上的绝对路径。在项目属性中设置 C/C++ 》附加包含目录,这里主要填入opencv安装后的头文件目录,我这里是
/usr/local/opencv/340/include
/usr/local/opencv/340/include/opencv
/usr/local/opencv/340/include/opencv2
具体的路径根据你安装opencv确定。
C++编译器选为g++
2/链接外部opencv库
2-1 设置“附加”库目录
链接外部opencv库,之前我一直在VC++目录下设置 库目录,后来发现根本没用!
后来发现,凡是需要远程在Linux系统上运行的,都必须设置在 “附加“里面。故,**Linux的库目录也必须设置在“附加库目录”里面,里面填写的是opencv相关库在Linux下的绝对路径。
这里我填写
/usr/local/opencv/340/lib
2-2 设置库依赖项
这里跟windows下设置类似,在连接器》输入》库依赖项中,填写可能用到的opencv库名称(注意这里的名称是去掉“lib”前缀和”.a”/”.so”尾缀的库名称)。
我这里填入:
opencv_calib3d
opencv_core
opencv_dnn
opencv_features2d
opencv_flann
opencv_highgui
opencv_imgcodecs
opencv_imgproc
opencv_ml
opencv_objdetect
opencv_photo
opencv_shape
opencv_stitching
opencv_superres
opencv_video
opencv_videoio
opencv_videostab
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
3/小程序测试
随便在main.cpp中写个小程序测试一下:
#include <cstdio>
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
printf("hello from UbuntuTestified!\n");
Mat srcImage = imread("11.jpg");
imshow("testImg2", srcImage);
waitKey(5000);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
按F5生成一下……怎么没反应?别急,VS是在Windows系统,生成的程序是在Linux系统,自然不能在windows下显示效果(但文字显示可以)。
直接到Linux系统下,该程序的生成路径下(…\bin\release或debug)打开,记得把命名为”11.jpg”的图片也放入该路径下。
这样程序就能正常运行了。
使用VS2017 编写Linux系统上的Opencv程序的更多相关文章
- 在VMware的Linux系统上安装Redis
在VMware的Linux系统上安装Redis 具体过程如下: 下载,解压和编译: 在执行make的时候报错,具体报错信息如下: zmalloc.o: In function `zmalloc_use ...
- Oracle 11g客户端在Linux系统上的配置步骤详解
Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...
- Linux系统上安装mysql数据库
一:下载并且上传安装包到linux系统上 1:下载地址:http://dev.mysql.com/downloads/mysql/ 2:通过LeapFtp工具,将windows上的mysql安装包拷贝 ...
- VM下的linux系统上不了网?? 使用putty远程登录不上linux的解决方法?
背景:昨晚想尝试一下用putty远程登录我的linux系统,悲剧的是,我竟然连接不上,显示 connection refused ,连接被拒绝.于是我就想看看能不能在linux下看看能不能访问百度 ...
- Linux系统上使用php获取apk信息
最近在做一个apk商城,需要在用户上传了apk之后系统自动读取apk信息(包名,版本号等),后台语言使用的是php,需要php去调用系统的aapt命令去读取apk信息,在Linux系统上安装aapt的 ...
- 在Linux系统上限制远程登录的IP
在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则 先allow 后deny.
- Redis进阶实践之二如何在Linux系统上安装安装Redis
一.引言 上一篇文章写了"如何安装VMware Pro虚拟机"和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我们才可以在该系统上安装Redis. ...
- Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务
一.引言 今天本来没有打算写这篇文章,当初我感觉使用这个工具应该很简单,下载的过程也不复杂,也没有打算记录下来.但是在使用的过程中还是出现了一些问题,为了给第一次使用Redis Desktop Man ...
- 在Linux系统上利用Tomcat搭建测试环境
第一歩:查看Linux系统的IP地址. 输入命令:ifconfig 第二歩:WinSCP工具 1.下载WinSCP工具,便于文件直接从windows系统直接拖动到Linux系统中,图形化创建文件夹等. ...
随机推荐
- tech| kafka入门书籍导读
J梳理了一下自己在入门 kafka 时读过的一些书, 希望能帮助到对 kafka 感兴趣的小伙伴. 涉及到的书籍: kafka 权威指南 Kafka: The Definitive Guide (ka ...
- angularjs实现星星评分
angularjs实现星星评分 自定义指令 app.directive('myStars', function () { return { require : '?ngModel', // ?ngMo ...
- sublime 常见问题
问题一: There Are No Packages Available For Installation 原因:官方提供的Package Control不能用.将官方的那个Package Contr ...
- WAF:web应用防火墙
1,sql注入2,xss3,不安全下载 code_backup.tar.gz .sql 4.隐私文件访问 .svn .git 5.弱口令6. 非授权访问 redis 7.cc攻击 性能cc攻击8.DD ...
- https://www.adminsub.net/tcp-udp-port-finder/14000 ——查找tcp端口对应的服务 可以看某些端口是否让恶意软件开启
效果: TCP/UDP Port FinderPort number or name:Enter port number (e.g. 21), service (e.g. ssh, ftp) or t ...
- DGA GAN——GAN在安全中的应用
DGA的模型:https://github.com/Yuren-Zhong/DeepDGA CNN.LSTM.双向LSTM 论文可以看https://openreview.net/pdf?id=BJL ...
- ubuntu 安装python3.7 以及安装pip3 出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决
最近因为电脑重装,东西全没了,总计一下最近重装环境的过程. 如果没有安装包,请下载: wget http://www.python.org/ftp/python/3.7.0/Python-3.7.0. ...
- 安装nodejs+npm的体验
NODEJS.NPM安装配置步骤(WINDOWS版本) 1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://no ...
- HAWQ取代传统数仓实践(十五)——事实表技术之无事实的事实表
一.无事实事实表简介 在多维数据仓库建模中,有一种事实表叫做"无事实的事实表".普通事实表中,通常会保存若干维度外键和多个数字型度量,度量是事实表的关键所在.然而在无事实的事实表中 ...
- 预热篇- 总结Delphi Xe4 做App的的可行性分析. ios平台的问题还需要自行学习
首先澄清一个问题, 很多同学其实是误会了, 以为只要搞定了Delphi 就能很快写快餐程序了. ios 本身的知识还是需要一些的, 并没有什么捷径可以走. 但如果一个团队有分工协作的话, Delph ...