Ubuntu下opencv的安装使用

2023-05-16

目录

  • 一、Ubuntu下安装opencv
  • 二、Ubuntu下opencv摄像头的使用
    • 1.打开摄像头显示处理视频的程序
    • 2.改进
  • 三、总结

一、Ubuntu下安装opencv

1.下载oencv
在ubuntu的浏览器中输入官网链接
https://opencv.org
点击sources
在这里插入图片描述
2.将下载的压缩文件,复制移动到home目录下
在这里插入图片描述
输入代码解压文件

unzip opencv-4.5.0.zip

在这里插入图片描述

进入文件

cd opencv-4.5.0

在这里插入图片描述
安装cmake依赖库

sudo apt-get install cmake

在这里插入图片描述
再进行安装就可以了
之后执行下一个代码

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 ..

在这里插入图片描述

执行,开始编译

//可以使用ls查看是否有CMakefile,再执行make
sudo make

在这里插入图片描述

该命令执行完毕后,opencv的编译过程就结束了

sudo make install

opencv的环境配置
添加opencv库的路径

//这里可以利用你熟悉的编辑器
sudo vim /etc/ld.so.conf.d/opencv.conf 

添加内容:(文件可以是一个空文件,直接在文件末尾加上内容)

/usr/local/lib

在这里插入图片描述

保存文件修改,然后执行命令使配置内容生效

sudo ldconfig  

在这里插入图片描述
配置bash

sudo vim /etc/bash.bashrc  

添加内容:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  

在这里插入图片描述

保存文件修改,然后执行命令使配置内容生效

source /etc/bash.bashrc  

在这里插入图片描述

测试代码
注:补全头文件<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`

编译出现错误
在这里插入图片描述

解决方法:
将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.改进

程序代码:

/*********************************************************************
打开电脑摄像头,空格控制视频录制,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;

void main()
{
	//打开电脑摄像头
	VideoCapture cap(0);
	if (!cap.isOpened())
	{
		cout << "error" << endl;
		waitKey(0);
		return;
	}

	//获得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就可以解决了。

//删掉这样段代码
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(使用前将#替换为@)

Ubuntu下opencv的安装使用 的相关文章

  • rosbag 从旧topic,迁移到新topic

    rosbag 从旧topic xff0c 迁移到新topic source 目标devel setup bash文件生成rules bmr迁移规则 rosbag check in bag g rules bmr修改迁移规则文件rules b
  • 研究生阅读文献技巧

    研究生如何做文献阅读和阅读笔记 以后大部分内容综合自PPT 研究生如何做文献阅读和阅读笔记 和 How to Read Paper 若侵权删 首先是一位研究生老师的建议 xff1a 今后大家提交的论文阅读笔记和工作报告尽量用英文写 可以直接
  • asp.net中执行exe应用程序

    在asp net中执行应用程序有两种方法 xff1a 1 调用win32函数ShellExecute 2 用 NET Framework中的Process类 下面我分别用这两种方法执行Windows中的记事本程序notepad exe 新建
  • Win10 安装Tensorflow-GPU版教程(附CUDA安装 could not fine compatible graphic hardware问题解答)

    入了深度学习的坑 xff0c 需要搭建Tensorflow环境 xff0c 虽然渣渣显卡 xff0c 但是总比CPU来得快 xff0c 果断选择GPU版 在网上找了很多资料 xff0c 受益颇多 但是由于tensorflow最近更新了 xf
  • 带你了解无人机的大脑-飞控

    无人机大脑 xff1a 飞控 无人机之所以能够在空中自主飞行就是因为无人机也和人一样 xff0c 也拥有一个大脑 xff0c 究竟是什么样的一个大脑才能够控制一架飞机在空中自动驾驶呢 xff1f 一起来看看 通俗点说 xff0c 能够自主起
  • STM32F103串口(ISP)下载

    1 ISP简介 ISP Iin System Programming 在系统可编程 xff0c 指电路板上的空白器件可以编程写入最终用户代码 xff0c 而不需要从电路板上取下器件 xff0c 已经编程的器件也可以用SP方式擦除或再编程 I
  • 用Docker搭建更酷的本地开发环境

    以前要在本地跑一些有意思的工程和实验 xff0c 都需要通过在本地装上一大堆软件来实现 最近发现有一种更酷的方式 xff1a Docker 用Docker在本地搭建开发环境有一系列显而易见的优势 xff1a 不用依赖公司的资源 xff0c
  • 只需修改一个像素,让神经网络连猫都认不出 | 论文+代码

    夏乙 编译整理 量子位 出品 公众号 QbitAI 想骗过神经网络 xff0c 让它认错图像 xff0c 需要对图像做多少修改 xff1f 一个像素就够了 一项来自日本的研究表明 xff0c 改动图片上的一个像素 xff0c 就能让神经网络
  • 小米迎来NLP首席科学家王斌:中科院研究员,雷军崔宝秋亲学弟

    雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 曾经武大郎 xff0c 今日小米科学家 小米又有AI科学家加盟 xff0c 这次是中国科学院信息工程研究所研究员王斌 xff0c 他将出任小米AI实验室NLP首席科学家 xff0c 负
  • IGMPv1,v2,v3详解

    简介 IGMP IGMP Internet Group Management Protocol xff09 作为因特网组管理协议 xff0c 是TCP IP协议族中负责IP组播成员管理的协议 xff0c 它用来在IP主机和与其直接相邻的组播
  • 华为最强AI芯片麒麟980发布:全球首款7nm手机芯片,双核NPU,6项世界第一

    安妮 雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 遥遥领先 xff01 这是华为消费者业务CEO余承东放下的狠话 xff0c 他说自家即将推出的手机芯片麒麟980 xff0c 将在全球范围内遥遥领先 而且领先的不是别家 xff0
  • Haar小波提升算法

    传统的小波变换是在傅里叶变换的基础上演变而来 xff0c 计算过程中存在着大量的卷积运算或是乘累加的计算 xff0c 如若在硬件上实现 xff0c 势必会消耗大量的寄存器资源 xff0c 而且速度也上不去 提升小波又称为第二代小波 xff0
  • 【Docker学习】Docker Hub + GitHub实现镜像自动构建

    近期学习Docker的相关知识 xff0c 尝试了一下Docker Hub 43 GitHub自动构建镜像 xff0c 在此记录一下过程 将GitHub账号关联到Docker Hub账号 设置位置 下滑到Linked Accounts xf
  • spring整合mybatis报错Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容

    在spring的配置文件中配置mybatis时使用的是 xff1a span class hljs comment lt 控制和MyBatis整合 gt span span class hljs tag lt span class hljs
  • linux中UDP编程

    在前面的文件中 xff0c 我们介绍了linux网络编程中与IP相关的知识和常用的函数总结 xff0c 本文针对具体的UDP通信 xff0c 来详细的介绍UDP通信的使用 xff0c 包括UDP通信中的点对点通信 xff0c 多播 xff0
  • 语音增强--卡尔曼滤波介绍及MATLAB实现

    语音增强 卡尔曼滤波 状态方程 x k 43 1 61
  • 树莓派官方系统(raspbian)安装及使用教程

    以下内容为本人原创 xff0c 欢迎大家观看学习 xff0c 禁止用于商业用途 xff0c 作者 xff1a 64 Yhen 原文网站 xff1a CSDN 原文链接 xff1a https blog csdn net Yhen1 arti
  • 主键和外键的区别

    一 什么是主键 外键 主键 xff1a 关系型数据库中的一条记录中有若干个属性 xff0c 若其中某一个属性组 注意是组 能唯一标识一条记录 xff0c 该属性组就可以成为一个主键 比如 1 学生表 学号 xff0c 姓名 xff0c 性别
  • C++中,使用libCurl实现http的post请求

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • nodejs版本管理NVM

    nodejs版本管理NVM NVM全称 xff08 Node Version Manager xff09 是一个用来管理node版本的工具 因为在开发electron版本应用时遇到了 xff0c nodejs使用版本冲突 xff0c 所以我

随机推荐

  • OSPF中DR、BDR竞选机制【转载】

    OSPF DR BDR 竞选机制详解 OSPF 上篇技术文章中提到了建立邻居和邻接关系 xff0c 而邻居关系建立成功之后 xff0c 在broadcast NBMA网络上会进行DR BDR竞选 DR产生背景 在MA网络中 xff0c 任意
  • Citrix Receiver在linux系统(Ubuntu)下的安装使用

    本文为解决在linux系统下Citrix Receiver安装完成后无法登录服务器的情况 xff0c windows下没有这个问题 其中报错为无法识别安全证书 提示 xff1a no such file or directory verif
  • ORA-28000:the account is locked错误解决

    Oracle数据库日志中出现ORA 28000 the account is locked的错误 xff0c 可以按下面的步骤处理 xff1a 1 查询FAILED LOGIN ATTEMPTS参数默认值 xff0c 这个参数限制了从第一次
  • 在Ubuntu上安装boost库

    boost中 xff0c 用到了别的函数库 xff0c 所以为了使用boost中相应的功能 xff0c 需要先安装系统中可能缺失的库 apt get install mpi default dev 安装mpi库 apt get instal
  • 嵌入式平台算法优化

    嵌入式平台算法优化 目录 目录 前言 4 1 嵌入式系统优化流程 6 1 xff0c 选用更优的算法 6 2 xff0c 选择嵌入式平台型号 6 3 xff0c 算法优化一般流程 9 2 高效的编程 15 1 xff0c 数据类型 15 2
  • [028] Gazebo构建Kinect模型,在RVIZ中显示点云PointCloud2出错:点云位姿错误,浮在空中

    一 Bug描述 1 发生错误的 urdf代码 xff08 也不是代码错误 xff0c 是gazebo的bug xff09 lt link name 61 34 camera link 34 gt lt visual gt lt origin
  • Win10校园网宽带连接频繁秒断

    问题 xff1a 宽带连接连上过后很快就断开 解决方法 xff1a 1 Win 43 R输入regedit打开注册表编辑器 2 打开路径 xff1a 计算机 HKEY LOCAL MACHINE SYSTEM ControlSet001 S
  • UML类图--泛化关系

    泛化关系 Generalization 属于类的继承关系 xff0c 表明了子类如何特化或实现父类的属性和方法 UML类图表示 xff1a 箭头指向 xff1a 带箭头的实线 xff0c 箭头指向父类 代码实现 xff1a 测试类 publ
  • 汉诺塔问题解析(C语言)

    目录 一 什么是汉诺塔问题二 汉诺塔移动图解三 代码实现总结 一 什么是汉诺塔问题 汉诺塔问题是一个经典的问题 汉诺塔 xff08 Hanoi Tower xff09 xff0c 又称河内塔 xff0c 源于印度一个古老传说 大梵天创造世界
  • Shell脚本学习——字符串处理

    最近在做很多的字符串处理的工作 xff0c 主要用的还是excel xff0c 但是很费神 xff0c 总是Ctrl 43 C和Ctrl 43 V 就想用shell脚本对对应的字符串进行批量处理 1 xff09 首先是读取文件中的每一行字符
  • DSP算法移植---总结

    总结 很久没有写文章了 xff0c 今天逛了逛博客 xff0c 看到DSP算法移植的文章 xff0c 至于这个项目 xff0c 本人解释下 本人7月份将硕士毕业了 xff0c 不久就要离开校园了 xff0c 所以我基本上不接触这个项目了 x
  • L2TP协议【转载】

    L2TP协议 一 43 L2TP Layer 2 Tunnel Protocol 第2层隧道协议 xff0c 是为在用户和企业的服务器之间透明传输PPP报文而设置的隧道协议 43 特性 灵活的身份验证机制以及高度的安全性 多协议传输 支持R
  • ROMFS文件系统分析

    ROMFS文件系统分析 ROMFS是一种简单的只读文件系统 xff0c 主要是用来当做初始文件系统来使用的 xff0c 在嵌入式linux或是uclinux中通常使用这中文件系统来作为引导系统的文件系统 xff0c 甚至uclinux有时就
  • Linux/Ubuntu 怎么设置打开远程桌面登录连接

    Liux Ubuntu 怎么设置打开远程桌面登录连接 Linux Ubuntu 下做一些设置在windows中就可以打开远程桌面登录Ubuntu 或者在本地Ubuntu远程登录windows或者Ubuntu远程登录别的Ubuntu桌面 xf
  • Latex论文复杂组合图片设计

    最近在使用Latex写博士论文 xff0c 中间遇到了一些想设计一幅图片中多个子图位置的问题 如果想画普通的横排多图或者竖排多图 xff0c 可以使用 begin figure centering subfigure includegrap
  • 打麻将清一色自摸后偏瘫?高血压患者这些事项要注意

    最近有一条让人哭笑不得的热搜 xff0c 上海一男子居然因为打麻将清一色自摸兴奋过度 xff0c 导致脑出血偏瘫了 细究原因 xff0c 是因为该男子平时就有高血压 xff0c 又爱打麻将 对此医生也提醒 xff0c 情绪过于激动时极易诱发
  • 对idea2020.1.1的遇坑实测【实时更新】

    1 第一坑 xff0c 你可以更换maven库 xff0c 但是不管你怎么换 xff0c idea2020 1 1还是会使用 m下的 虽然你在project structrue里看起来都很正常 xff0c 但是你一打包运行就会发现你的art
  • 在Ubuntu系统中编译C语言程序

    在Ubuntu系统中编译C语言程序 用gcc命令编译主程序main1 c 并运行在VC 43 43 6 0中编译主程序main1 c 并运行在ubuntu系统下用Makefile的方式编译主程序 用gcc命令编译主程序main1 c 并运行
  • STM32简单程序的编译——LED闪烁

    LED闪烁 程序编译总结 程序编译 默认已经完成MDK5软件和STM32包的安装 首先利用keil建立工程 打开Keil uVision5软件 xff0c 点击左上角的File xff0c 然后点击New建立新文件 然后点击Project选
  • Ubuntu下opencv的安装使用

    目录 一 Ubuntu下安装opencv二 Ubuntu下opencv摄像头的使用1 打开摄像头显示处理视频的程序2 改进 三 总结 一 Ubuntu下安装opencv 1 下载oencv 在ubuntu的浏览器中输入官网链接 https