目录
- 一、Ubuntu下安装opencv
- 二、Ubuntu下opencv摄像头的使用
-
- 三、总结
一、Ubuntu下安装opencv
1.下载oencv
在ubuntu的浏览器中输入官网链接
https://opencv.org
点击sources
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030184051583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
2.将下载的压缩文件,复制移动到home目录下
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030184633556.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
输入代码解压文件
unzip opencv-4.5.0.zip
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030184842171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
进入文件
cd opencv-4.5.0
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030184900423.png#pic_center)
安装cmake依赖库
sudo apt-get install cmake
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030194634565.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
再进行安装就可以了
之后执行下一个代码
sudo apt-get install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
安装完成后,新建一个编译目录并对其进行配置
mkdir my_built_file
cd my_built_file
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030201248935.png#pic_center)
执行,开始编译
sudo make
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030201901421.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
该命令执行完毕后,opencv的编译过程就结束了
sudo make install
opencv的环境配置
添加opencv库的路径
sudo vim /etc/ld.so.conf.d/opencv.conf
添加内容:(文件可以是一个空文件,直接在文件末尾加上内容)
/usr/local/lib
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030202323805.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
保存文件修改,然后执行命令使配置内容生效
sudo ldconfig
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030202430140.png#pic_center)
配置bash
sudo vim /etc/bash.bashrc
添加内容:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030202804334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpYm9odWl4aQ==,size_16,color_FFFFFF,t_70#pic_center)
保存文件修改,然后执行命令使配置内容生效
source /etc/bash.bashrc
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030204637254.png#pic_center)
测试代码
注:补全头文件<opencv2.hightgui.cpp><opencv2/opencv.hpp>
图片放在home目录下
#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("cat.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();
return 0;
}
编译代码:
gcc test.cpp -o test `pkg-config --cflags --libs opencv`
编译出现错误
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201030204741138.png#pic_center)
解决方法:
将gcc修改为g++
g++ test.cpp -o test `pkg-config --cflags --libs opencv`
执行:
./test
二、Ubuntu下opencv摄像头的使用
1.打开摄像头显示处理视频的程序
代码:
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
VideoCapture capture(0);
while (1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧", frame);
waitKey(30);
}
system("pause");
return 0;
}
编译:
g++ test.cpp -o test `pkg-config --cflags --libs opencv`
利用**./rest**运行程序
查看摄像头是否能够打开:
lsusb 查看usb设备列表
ls /dev/video* 查看摄像头驱动安装
sudo apt-get install cheese 如果已经安装,这步可以省略
cheese 打开摄像头
问题分析:
1.如果要求打开你硬盘上一个视频文件来播放,如何修改?
答:将代码中的VideoCapture capture(0);修改为VideoCapture capture("/home/ubuntu/video/test.mp4")
即将0改为需要播放的视频名称以及它所存放的路径
2.在while循环中,Mat是一个什么数据结构? 为什么一定要加一句waitKey延时代码,删除它行不行?
答:Mat是一个矩阵,每个图像都是由无数的点构成的,即Mat是一个图像矩阵。
waitKey()函数的功能是不断刷新图像,如果没有这个就无法实现画面的实时显示,即看不到画面的变化。
3.此代码会在while循环中一直运行,你如果试图用鼠标关闭图像显示窗口,会发现始终关不掉。需要用键盘Ctrl+C 强制中断程序,非常不友好。如何改进。
答:增加一个判断语句,来进行关闭。
2.改进
程序代码:
#include<iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
void main()
{
VideoCapture cap(0);
if (!cap.isOpened())
{
cout << "error" << endl;
waitKey(0);
return;
}
int w = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH));
int h = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_HEIGHT));
Size videoSize(w, h);
VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, videoSize);
Mat frame;
int key;
char startOrStop = 1;
char flag = 0;
while (1)
{
cap >> frame;
key = waitKey(100);
if (key == 32)
{
startOrStop = 1 - startOrStop;
if (startOrStop == 0)
{
flag = 1;
}
}
if (key == 27)
{
break;
}
if (startOrStop == 0 && flag==1)
{
writer << frame;
cout << "recording" << endl;
}
else if (startOrStop == 1)
{
flag = 0;
cout << "end recording" << endl;
}
imshow("picture", frame);
}
cap.release();
writer.release();
destroyAllWindows();
}
编译:
编译过程会出现图片中的报错,有这个错误也不要担心,只需要将代码中判断摄像头是否能够打开的语句删掉或者将这段语句中的return语句后面加上0就可以解决了。
if (!cap.isOpened())
{
cout << "error" << endl;
waitKey(0);
return;
}
if (!cap.isOpened())
{
cout << "error" << endl;
waitKey(0);
return 0;
}
当按下ESC按键时,可以关闭视频画面。
三、总结
通过这个本次Ubuntu下的opencv操作,我们了解了它的基本使用方法。中间出现的很多问题我们都能找到方法解决。自己上手操作,可以有更多体会。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)