Ubuntu下的Opencv的安装与初步使⽤⼀、认识 OpenCV 
  开源计算机视觉(OpenCV)是⼀个主要针对实时计算机视觉的编程函数库。
  OpenCV的应⽤领域包括:
2D和3D功能⼯具包
运动估计
⾯部识别系统
⼿势识别
⼈机交互
移动机器⼈
动作理解
物体识别
分割和识别
实体影像⽴体视觉:来⾃两个摄像机的深度感知
运动中的结构(SFM)
运动跟踪
增强现实
为了⽀持上述⼀些领域,OpenCV包括⼀个统计机器学习库,其中包含:
提升(Boosting)
决策树学习
梯度提升树
期望最⼤化算法
k最近邻算法
朴素贝叶斯分类器
⼈⼯神经⽹络
随机森林
⽀持向量机(SVM)
深层神经⽹络(DNN)
⼆、安装 OpenCV
2.1
  下载 OpenCV 3.4.11 数据包
2.2
2.3
2.4
unzip opencv-3.4.11.zip
2.5
  使⽤ cmake 安装 opencv
  ⾸先进⼊解压后的⽂件夹:opencv-3.4.11
cd opencv-3.4.11
⾸先进⼊ root ⽤户,并更新⼀下。
sudo su
sudo apt-get update
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
接下来创建 build ⽂件夹
mkdir build
然后进⼊我们创建的⽂件夹:build
cd build
使⽤ cmake 编译参数,或者使⽤第⼆条默认参数,都可以的。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake ..
2.6
使⽤ make 创建编译
仍然是在 build ⽂件夹下进⾏。
sudo make #单线程编译:sudo make ,这会等待⽐较长的时间,如果你想更快编译完,可以使⽤命令:sudo make -j4 ,⽽ -j4 表⽰使⽤ 4 个线程进⾏编译编译完成
2.7安装
sudo make install
安装过程中没有报错,即可安装完成。
三、配置环境
  修改 f ⽂件,打开后的⽂件是空的,添加 opencv 库的安装路径:/usr/local/lib
sudo gedit /etc/f.f
保存后会看到之前的警告信息,不⽤理睬。
sudo ldconfig
配置 bash ,修改 bash.bashrc ⽂件
sudo gedit /etc/bash.bashrc
在⽂件末尾插⼊
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
source /etc/bash.bashrc
出现提⽰则安装成功
四、在安装过程中需要注意的问题(请先看此处)
安装过程中需要注意的是留⼼是否进⼊了⽂件⽬录的问题,如果没有进⼊opencv的⽂件⽬录在进⾏ make操作时会提⽰没有⽆法定位软件包“libjasper-dev“的问题,遇见这种情况有两种:①下载的软件包有问题②没有进⼊相应的⽂件⽬录。第⼆点尤其需要注意不然会花费⼤量的时间去寻问题,⽂章结尾处会放初⼀些博客的链接,是我解决问题的中看到的⼀些⽂章,可以供⼤家参考。
五、初试Opencv
mkdir cv2
cd cv2
vim test1.cpp
然后输⼊如下的代码
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
CvPoint center;
double scale = -3;
IplImage* image = cvLoadImage("lena.jpg");
argc == 2? cvLoadImage(argv[1]) : 0;
cvShowImage("Image", image);
if (!image) return -1;    center = cvPoint(image->width / 2, image->height / 2);
for (int i = 0;i<image->height;i++)
for (int j = 0;j<image->width;j++) {
double dx = (double)(j - center.x) / center.x;
double dy = (double)(i - center.y) / center.y;
double weight = exp((dx*dx + dy*dy)*scale);
uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
ptr[0] = cvRound(ptr[0] * weight);
ptr[1] = cvRound(ptr[1] * weight);
ptr[2] = cvRound(ptr[2] * weight);
}
Mat src;Mat dst;
src = cvarrToMat(image);
cv::imwrite("test.png", src);
cvNamedWindow("test",1);      imshow("test", src);
cvWaitKey();
return0;
}
编译⽂件:
执⾏以下命令:
g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`
#–cflags⽤来指定程序在编译时所需要头⽂件所在的⽬录;–libs是指定程序在链接时所需要的动态链接库的⽬录
之后我们在同⽂件⽬录下,放⼊⼀张名为lena的图⽚,然后运⾏
会看到成功的显⽰了lena图
关于lena图的⼀些故事
该图原本是刊于1972年11⽉号花花公⼦杂志上的⼀张裸体插图照⽚的⼀部分,这期花花公⼦也是历年来最畅销的⼀期,销量达7,161,561本。1973 年6⽉,美国南加州⼤学的信号图像处理研究所的⼀个助理教授和他的⼀个研究⽣打算为了⼀个学术会议⼀张数字照⽚,⽽他们对于⼿头现有成堆"⽆聊"照⽚感到厌烦。事实上他们需要的是⼀个⼈脸照⽚,同时⼜能让⼈眼前⼀亮。这时正好有⼈⾛进实验室,⼿上带着⼀本当时的花花公⼦杂志,结果故事发⽣了……⽽限于当时实验室设备和测试图⽚的需要,lenna的图⽚只抠到了原图的肩膀部分。
ubuntu vim命令图中⼈为瑞典模特⼉ Lena Soderberg。现在被⼴泛使⽤的英⽂化名字"Lenna"最初是由花花公⼦杂志发表此照⽚时命名的,以⽅便英语读者近似正确地读出瑞典语中 "Lena"的发⾳。Lena Soderberg ⼥⼠现在仍住在她的家乡瑞典,拥有⼀个有三个孩⼦的家庭,并且在国家酒类专卖局⼯作。在1988年的时候,
她接受了瑞典⼀些计算机相关出版社的访问,她对于她的照⽚有这样的奇遇感到⾮常的惊奇与兴奋。这是她⾸次得知她的照⽚被应⽤在计算机⾏业。Lena Soderberg于1997年被邀请为嘉宾,参加了数字图像科学技术50周年学术会议。在该会议上,Lenna成了最受欢迎的⼈之⼀,她做了关于⾃⼰介绍的简要发⾔,并被⽆数的fans索取签名。
莱娜图在图像压缩算法是最⼴泛应⽤的标准测试图——她的脸部与裸露的肩部已经变成了事实上的⼯业标准。然⽽,这张图像的使⽤也引起了⼀些争议。⼀些⼈担⼼它的⾊情内容;《花花公⼦》杂志曾经威胁要起诉对莱娜图未经授权的使⽤。不过这家杂志已经放弃了这种威胁,取⽽代之的是⿎励因为公众利益使⽤莱娜图。戴维·C·蒙森(David C.Munson),IEEE图像处理汇刊(IEEE Transactions on Image Processing)的主编, 在1996年1⽉引⽤了两个原因来说明莱娜图在科研领域流⾏的原因:1.该图适度的混合了细节、平滑区域、阴影和纹理,从⽽能很好的测试各种图像处理算法。2.Lenna是个美⼥,对于图象处理界的研究者(⼤部分都是男性)来说,美⼥图可以有效的吸引他们来做研究。两张照⽚对⽐之下,莱娜的容貌虽已然衰⽼,但映射出的则是⼈⼯智能在计算机视觉领域⾛过了 46 年的发展。要知道,上世纪 60 年代,达特茅斯会议刚刚掀起第⼀波⼈⼯智能浪潮。直到 2012 年,Geoffery Hinton 团队参与的 ImageNet 竞赛,使⽤ CNN 模型以超过第⼆名 10 个百分点的成绩夺得当年竞赛的冠军。如今,深度学习、⼈⼯智能在图像处理领域正逐步深⼊的研究和应⽤。
六、播放视频那些事
获得摄像头权限
使⽤快捷键 Win + R ,输⼊ services.msc ,并回车。
到 VMware USB Arbitration S*服务,确保启动了。
点击 “ 虚拟机 ” ,然后点击设置(S)
选择 “ USB控制器 ” ,将 “ USB兼容性 ” 设置为 “ USB 3.1 ” ,并点击确定。
选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “ Microdia Intergrated_Webcam_HD(不同电脑可能摄像头名称不同) ” ,最后点击 “ 连接 ” ,再弹出的窗⼝内点击 “ 确定 ” 。
虚拟机右下⾓这个摄像头图标有个⼩绿点,则连接成功。
播放视频
关于需要播放视频的提前准备⼯作如下
安装snapd,终端命令:
sudo apt-get install snapd
安装ffmpeg:
sudo snap install ffmpeg
sudo add-apt-repository ppa:jonathonf/ffmpeg-4
sudo apt-get update
sudo apt-get install ffmpeg
查看ffmpeg:
ff[TAB][TAB]
使⽤ffmpeg打开mp4视频⽂件:
ffplay -autoexit filename.mp4
如果安装完后提⽰:video现缺少mpeg4 blabla h.246 decoder
输⼊ sudo snap install ffmpeg
创建⼀个 test2.cpp ⽂件。
vim test.cpp
将以下代码复制粘贴进去
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture("WLH.mp4");
//循环显⽰每⼀帧
while(1){
Mat frame;//定义⼀个Mat变量,⽤于存储每⼀帧的图像
capture >> frame;//读取当前帧
pty())//播放完毕,退出
break;
imshow("读取视频帧",frame);//显⽰当前帧
waitKey(30);//掩饰30ms
}
system("pause");
return0;
}
代码讲解:
如果语句:VideoCapture capture(0),后⾯的参数设置为 0 ,则从摄像头读取视频并循环显⽰每⼀帧;如果设置为⼀个视频的⽂件名,⽐如:man.mp4 ,则会将视频读取并循环显⽰每⼀帧。
while 循环体中的 Mat 数据结构其实是⼀个点阵,对应图像上的每⼀个点,点的集合形成了⼀帧图像,有关 Mat 详解请看:OpenCV中Mat数据结构语句:waitKey(30) ,中的参数单位是 ms 毫秒,也就是每⼀帧间隔 30 ms ,该语句时不能删除的,否则会执⾏错误,⽆法播放视频或录制视频。
准备⼀个⼩视频,我这⾥准备了罗曼卓耶弹的王⼒宏的唯⼀作为播放视频
编译⼀下
g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`
关于如何退出:切换到终端按下ctrl+c结束程序!!
接下来我们解析⼀下如何解决这么不⼈性化的问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。