Ubuntu下使用opencv打开图片视频
Ubuntu下使用opencv打开图片视频
- 一、安装opencv
- 二、配置环境
- 1.安装完成后,开始配置环境
- 2.更新系统共享链接库
- 3.修改bash.bashrc 文件
- 4.完成后执行命令
- 三、打开图片
- 1.创建目录
- 2.创建.cpp文件
- 3.编译运行代码
- 四、打开视频
- 五、获取摄像头
- 1.虚拟机获取摄像头权限
- 2.创建.cpp文件
- 3.编译运行
- 六、总结
一、安装opencv
在ubuntu下安装opencv,可以参考这篇博客-链接:https://blog.csdn.net/ssj925319/article/details/109231145,写得比较详细,把安装步骤全部都写出来了,我也是按照这个教程一步步完成安装的。
二、配置环境
1.安装完成后,开始配置环境
首先修改 opencv.conf
文件,添加opencv库的安装路径,输入
sudo gedit /etc/ld.so.conf.d/opencv.conf
然后在opencv.conf
文件中输入路径为/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
,使命令生效
然后输入sudo updatedb
,更新一下
最后查看opencv的版本信息。输入pkg-config --modversion opencv
三、打开图片
1.创建目录
输入mkdir code
创建一个目录
然后输入cd code
打开目录
2.创建.cpp文件
输入gedit work1.cpp
创建一个.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();return 0;
}
3.编译运行代码
输入g++ test1.cpp -o test1 pkg-config --cflags --libs opencv
进行编译,然后在code文件夹里面准备一张图片,注意:因为我代码里面的图片名字为lena.jpg
,所以该图片的名字也应该一致。
编译完成后输入./work1
运行
此时图片就打开了,并且还有一个特效
四、打开视频
打开视频与图片同理,首先创建一个work2.cpp文件,然后复制代码
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{//从摄像头读取视频VideoCapture capture("man.mp4");//循环显示每一帧while(1){Mat frame;//定义一个Mat变量,用于存储每一帧的图像capture >> frame;//读取当前帧if(frame.empty())//播放完毕,退出break;imshow("读取视频帧",frame);//显示当前帧waitKey(30);//掩饰30ms}system("pause");return 0;
}
然后准备一个视频文件,放入目录code里面。注意:这里的视频文件名要和代码里面一致,我都是改为man.mp4.
接着进行编译,输入g++ work2.cpp -o work2 pkg-config --cflags --libs opencv
然后输入./work2
运行
注意:ubuntu下自带的播放器可能打不开视频文件,需要解码器,如果遇到这种情况我们可以自己下载其他的播放器进行视频播放。
五、获取摄像头
1.虚拟机获取摄像头权限
首先在windows系统下键入win+R,然后输入 services.msc
然后找到VMware USB Arbitration S,确认已经启动
接着我们打开VMware,点击虚拟机,选择设置,点击后找到 USB控制器 ,这时可以看到USB兼容性,将其设置为3.0或以上,我自己的是3.1
最后点击虚拟机–可移动设备,再选择最下面的你的设备的摄像头,然后点击连接,连接确定后,在ubuntu的右下角的摄像头图片有一个小绿点,说明已经连接上了。
2.创建.cpp文件
首先依旧是创建一个.cpp文件,输入gedit work3.cpp
,将代码复制进去
/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi
*********************************************************************/
#include<iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;int main()
{//打开电脑摄像头VideoCapture cap(0);if (!cap.isOpened()){cout << "error" << endl;waitKey(0);return 0;}//获得cap的分辨率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;//0 开始录制视频; 1 结束录制视频char flag = 0;//正在录制标志 0-不在录制; 1-正在录制while (1){cap >> frame;key = waitKey(100);if (key == 32)//按下空格开始录制、暂停录制 可以来回切换{startOrStop = 1 - startOrStop;if (startOrStop == 0){flag = 1;}}if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘{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;
}
3.编译运行
输入g++ work3.cpp -o work3
pkg-config --cflags --libs opencv
进行编译
然后再输入./work3运行,这时就会打开摄像头进行录制,并生成一个.avi文件就完成了。不过我的电脑摄像头打不开,但是原理和操作都是正确的。
六、总结
安装和配置opencv的过程确实是比较复杂繁琐的,也需要话不少的时间,而且每一步都必须按照流程做,不然很容易出错,其次就是在打开视频时我发现因为程序当中的while循环一直在持续运行,导致我的视频打开后关闭不了,只能通过关闭总端的方式来关闭,说明代码还需要改进,总之opencv在处理图像视频方面功能非常强大,还有许多方面等待我们去挖掘学习,现在也只是打开了opencv的大门,希望以后能够学习到更多。
Ubuntu下使用opencv打开图片视频相关推荐
- 【OpenCV学习】使用OpenCV打开图片视频
一.使用代码打开一张图片 代码如下: #include <opencv.hpp>int main() {cv::Mat img = cv::imread("D://My Code ...
- Ubuntu 下调用 opencv 在图片显示汉字和数字
目录 实验要求: 1 环境准备 1.1创建文件 实验要求: 学习理解汉字的机内码.区位码编码规则和字形数据存储格式.在Ubuntu下用C/C++(或python) 调用opencv库编程显示一张图片, ...
- Ubuntu下的opencv:在图片上加汉字和数字
文章内容:本文主要介绍汉字的编码规则,并在ubuntu下调用opencv把汉字和数字叠加在图片上. 一.汉字编码 (一)区位码 在国标 GD2312-80 中规定,所有的国标汉字及符号分配在一个 94 ...
- Ubuntu下解决OpenCV不能重复打开摄像头拍照问题
在ubuntu下使用opencv重复调用摄像头后出现错误HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by Op ...
- Ubuntu下的OpenCV的安装及使用
一.OpenCV 开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库. 二.安装 OpenCV (1)安装包下载 国内快速下载地址:OpenCV/opencv_contrib国内快 ...
- Linux 环境下使用 OpenCV 显示图片
Linux 环境下使用 OpenCV 显示图片 一.下载虚拟机 二.下载镜像文件(我用的 ubuntu) 三.安装虚拟机 四.打开虚拟机 五.安装 opencv 依赖包 六.下载 OpenCV 七.解 ...
- OPENCV打开图片进行边缘检测
OPENCV打开图片并且进行边缘检测 #ifdef _CH_ #pragma package <opencv> #endif#ifndef _EiC #include "cv.h ...
- 用opencv打开一个视频并加特效(灰度转换、高斯滤波、canny边缘检测处理)再保存
做这个代码时只在保存转化后的视频时出现了问题,就是保存的avi文件打不开,并且大小很小(所以我怀疑没有写进去) 导致出错的代码 VideoWriter writer("qinshi3.avi ...
- Linux命令模式下打开摄像头,Linux下利用Opencv打开笔记本摄像头问题
新建test文件夹,文件夹存在test.cpp和CMakeLists.txttest.cpp#include #include #include #include #include #include ...
最新文章
- 简易django项目之登录验证
- junit基础学习之-断言注解(3)
- Qt编写的线损分析工具
- OpenShift 4 之 Hello-OpenShift
- IBM 确认裁员约 1700 人;华为新款操作系统来了!开通 5G 服务不换卡不换号 | 极客头条...
- Android移动开发基础案例教程 第2章 Android UI开发
- 知识分享:数据分析的6大基本步骤
- 读书笔记之——《谷歌和亚马逊如何做产品》
- 树形结构来了(了解)
- 对郭天祥老师的一些知识点的解读
- linux 内核调试 booting the kernel.,Linux无法启动解决 booting the kernel.
- 坐标系旋转后的点坐标、坐标点旋转后的点坐标
- JDK14打包工具jpackage的使用
- select语句(3)--单值函数
- js进阶实例,数字时钟
- 计算机培训ppt教案,课件制作的教案
- android 各别控件缩放,[翻译]Android单手指缩放-第二部分(Android one finger zoom tutorial – Part 2)...
- 闪聚支付 第3章-支付宝接入指南
- ssm基于微信小程序跳蚤市场系统
- 工厂用计算机自动控制技术,一种基于计算机技术的工厂车间灯光控制系统的制作方法...
热门文章
- 活动 | 注册即半价,治愈你第二杯半价时的孤单
- python-简单汇率转换
- Go语言字符串高效拼接
- npm ERR! Log files were not written due to an error writing to the directory: D:\Program Files (x86)
- javascript 模块化
- jmeter学习笔记(三):jmeter参数化
- 【APP支付】关于APP支付宝支付那些事
- A40i使用笔记:调用系统自带驱动GT911触摸屏
- 为什么要用反指纹浏览器?
- 互联网平台能否容纳下小米和雷军