(1)下载opencv3.4.12
下载地址 https://opencv.org/releases/#
(2)解压下载的安装包
sudo unzip opencv-3.4.12.zip
(3)更新数据
sudo apt-get update
sudo apt-get upgrade
(4)安装依赖包
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
(5)创建编译文件夹
注意opencv安装的位置进行操作
mkdir my_build_dir
(6)进入创好的文件夹进行配置
cd my_build_dir
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
执行make后会等待较长时间
达到100%后执行命令
sudo make install
至此OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境
(1)修改opencv.conf文件
sudo gedit /etc/ld.so.conf.d/opencv.conf
文本可能为空白,在文本里添加opencv库的安装路径
/usr/local/lib
(2)更新系统共享链接库
sudo ldconfig
(3)修改bash.bashrc文件
sudo gedit /etc/bash.bashrc
在文件末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
(4)保存退出,然后执行如下命令使得配置生效
source /etc/bash.bashrc
(5)验证是否配置成功
查看opencv版本
pkg-config --modversion opencv
(1)在opencv安装目录下新建一个文件夹test,并进入test创建一个test.cpp
mkdir test
cd test
touch test.cpp
(2)在test.cpp中写入如下内容
#include
#include
using namespace cv;
int main()
{
//像素操作
Mat src,dst;
src = imread("/home/eric/opencv-3.4.12/test/wife.jpg");
if(src.empty())
{
printf("can not load image \n");
return 0;
}
namedWindow("input");//创建窗口
imshow("input",src);//显示图片
cvtColor(src, dst, COLOR_BGR2GRAY);//将图片转为灰度图
namedWindow("output");
imshow("output",dst);
waitKey();
return 0;
}
g++ test.cpp -o test2 `pkg-config --cflags --libs opencv`
编译命令详解https://blog.csdn.net/Rong_Toa/article/details/80117114
(4)运行程序
./test2
(1)现将宿主机的摄像头连接至虚拟机
方法https://blog.csdn.net/qq_42982742/article/details/103121511
(2)创建一个test2.cpp,写入如下内容
#include
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture(0);
//循环显示每一帧
while (1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频帧", frame);//显示当前帧
waitKey(30);//延时30ms
}
system("pause");
return 0;
}
(3)编译并运行程序
g++ test2.cpp -o test22 `pkg-config --cflags --libs opencv`
./test22
Mat是一个什么数据结构?
Mat是一个类。由两部分数据组成:矩阵头(包括矩阵尺寸、存储方法、存储地址等信息)和一个指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针。
为什么一定要加一句waitKey延时代码,删除它行不行?
waitKey()–这个函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下 键,则接续等待(循环)。不能删除,一般在 imshow() 后要使用 waitKey(),给图像绘制留下时间,不然窗口会出现无响应情况,并且图像无法显示出来。
运行会发现这个程序按×退不出去,得按Ctrl+c强制退出,如何改进?
(4)改进程序
对 wiatKey() 函数做一次判断
修改代码如下
#include
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture(0);
//循环显示每一帧
while (1)
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频帧", frame);//显示当前帧
//waitKey(30);//延时30ms
if(waitKey(30)==27) //按esc键退出
{
break;
}
}
system("pause");
return 0;
}
这一次实验使用到了OPENCV软件库,了解并学习了如何用opencv处理图片及视频,可以说是受益匪浅。
1.OpenCV在Ubuntu下的图像编程
2.在Ubuntu18.04上安装opencv 3.4.1