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打开图片视频相关推荐

  1. 【OpenCV学习】使用OpenCV打开图片视频

    一.使用代码打开一张图片 代码如下: #include <opencv.hpp>int main() {cv::Mat img = cv::imread("D://My Code ...

  2. Ubuntu 下调用 opencv 在图片显示汉字和数字

    目录 实验要求: 1 环境准备 1.1创建文件 实验要求: 学习理解汉字的机内码.区位码编码规则和字形数据存储格式.在Ubuntu下用C/C++(或python) 调用opencv库编程显示一张图片, ...

  3. Ubuntu下的opencv:在图片上加汉字和数字

    文章内容:本文主要介绍汉字的编码规则,并在ubuntu下调用opencv把汉字和数字叠加在图片上. 一.汉字编码 (一)区位码 在国标 GD2312-80 中规定,所有的国标汉字及符号分配在一个 94 ...

  4. Ubuntu下解决OpenCV不能重复打开摄像头拍照问题

    在ubuntu下使用opencv重复调用摄像头后出现错误HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by Op ...

  5. Ubuntu下的OpenCV的安装及使用

    一.OpenCV 开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库. 二.安装 OpenCV (1)安装包下载 国内快速下载地址:OpenCV/opencv_contrib国内快 ...

  6. Linux 环境下使用 OpenCV 显示图片

    Linux 环境下使用 OpenCV 显示图片 一.下载虚拟机 二.下载镜像文件(我用的 ubuntu) 三.安装虚拟机 四.打开虚拟机 五.安装 opencv 依赖包 六.下载 OpenCV 七.解 ...

  7. OPENCV打开图片进行边缘检测

    OPENCV打开图片并且进行边缘检测 #ifdef _CH_ #pragma package <opencv> #endif#ifndef _EiC #include "cv.h ...

  8. 用opencv打开一个视频并加特效(灰度转换、高斯滤波、canny边缘检测处理)再保存

    做这个代码时只在保存转化后的视频时出现了问题,就是保存的avi文件打不开,并且大小很小(所以我怀疑没有写进去) 导致出错的代码 VideoWriter writer("qinshi3.avi ...

  9. Linux命令模式下打开摄像头,Linux下利用Opencv打开笔记本摄像头问题

    新建test文件夹,文件夹存在test.cpp和CMakeLists.txttest.cpp#include #include #include #include #include #include ...

最新文章

  1. 简易django项目之登录验证
  2. junit基础学习之-断言注解(3)
  3. Qt编写的线损分析工具
  4. OpenShift 4 之 Hello-OpenShift
  5. IBM 确认裁员约 1700 人;华为新款操作系统来了!开通 5G 服务不换卡不换号 | 极客头条...
  6. Android移动开发基础案例教程 第2章 Android UI开发
  7. 知识分享:数据分析的6大基本步骤
  8. 读书笔记之——《谷歌和亚马逊如何做产品》
  9. 树形结构来了(了解)
  10. 对郭天祥老师的一些知识点的解读
  11. linux 内核调试 booting the kernel.,Linux无法启动解决 booting the kernel.
  12. 坐标系旋转后的点坐标、坐标点旋转后的点坐标
  13. JDK14打包工具jpackage的使用
  14. select语句(3)--单值函数
  15. js进阶实例,数字时钟
  16. 计算机培训ppt教案,课件制作的教案
  17. android 各别控件缩放,[翻译]Android单手指缩放-第二部分(Android one finger zoom tutorial – Part 2)...
  18. 闪聚支付 第3章-支付宝接入指南
  19. ssm基于微信小程序跳蚤市场系统
  20. 工厂用计算机自动控制技术,一种基于计算机技术的工厂车间灯光控制系统的制作方法...

热门文章

  1. 活动 | 注册即半价,治愈你第二杯半价时的孤单
  2. python-简单汇率转换
  3. Go语言字符串高效拼接
  4. npm ERR! Log files were not written due to an error writing to the directory: D:\Program Files (x86)
  5. javascript 模块化
  6. jmeter学习笔记(三):jmeter参数化
  7. 【APP支付】关于APP支付宝支付那些事
  8. A40i使用笔记:调用系统自带驱动GT911触摸屏
  9. 为什么要用反指纹浏览器?
  10. 互联网平台能否容纳下小米和雷军