Linux下安装opencv.3.4.15并初步使用

2023-05-16

目录

一. opencv简介

二 . 下载安装opencv

1. 下载opencv

2. 使用cmake安装opencv

3.安装cmake

4. 安装依赖库

  创建build文件夹,再进入文件夹

 使用cmake编译参数

 3.使用make创建编译并安装

 4. 配置环境

三. 使用示例图片

1. 新建文件夹存代码

 2. 新建test1.cpp

3. 将找到的图片复制到code目录下

4. 编译并运行test1.cpp文件

 四. 使用示例——视频

1. 获取摄像头权限

2. 播放视频

3.录制视频

 五. 总结

六. 参考链接


一. opencv简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]


它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

二 . 下载安装opencv

1. 下载opencv

从官网下载opencv,由于是在Linux下使用,下载source版本

 下载好之后把文件复制到home目录下或者在home里新建一个文件夹进行存放

 我的复制在home目录下,开始解压

解压命令:

unzip opecv-4.5.4.zip

解压后查看:

 可以看到已经有了文件夹,解压成功!

2. 使用cmake安装opencv

接下来就是下载opencv所需要的依赖库和cmake,因为下载之后得到的配置文件无法直接使用,需要使用cmake进行编译
进入到解压的文件包中:

cd opencv-4.5.4

进入管理员权限:

sudo su

再更新一下:

sudo apt-get update

 

3.安装cmake

sudo apt-get cmake

 报错:

 解决方法:删除锁定文件

sudo rm /var/lib/dpkg/lock-frontend       

sudo rm /var/lib/dpkg/lock

再次执行:

4. 安装依赖库

sudo apt-get install build-essent

 

  创建build文件夹,再进入文件夹

mkdir build
cd build

 使用cmake编译参数

 3.使用make创建编译并安装

sudo make

 编译过程较长,耐心等待,建议多线程进行,速度会快很多

编译完成:

安装:sudo make install

 4. 配置环境

修改 opencv.conf 文件,打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib

sudo gedit /etc/ld.so.conf.d/opencv.conf 

输入路径并保存:

 有警告可以忽略:

 更新系统共享链接库

sudo ldconfig

配置bush,修改bash.bshrc

sudo gedit /etc/bash.bashrc

 在文件末尾加入:

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

 然后执行如下命令使得配置生效:

source /etc/bash.bashrc 

 更新一下:

sudo updatedb

 查看opencv的版本信息:

pkg-config --modversion opencv

 

 安装成功

三. 使用示例图片

1. 新建文件夹存代码

mkdir code
cd code

 2. 新建test1.cpp

vim test1.cpp

 test1.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. 将找到的图片复制到code目录下

4. 编译并运行test1.cpp文件

编译:

g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

 

 运行:./test1

 

 文件夹里还多了test.png:

 四. 使用示例——视频

1. 获取摄像头权限

windows下打开服务:

 找到 VMware USB Arbitration S… 服务,确保启动成功

 点击 “ 虚拟机 ” ,然后点击 “ 设置(S)… ”

选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “ Quanta USB2.0 VGA UVC WebCam ” ,最后点击 “ 连接 ” ,再弹出的窗口内点击 “ 确定 ”

2. 播放视频

创建一个test2.cpp:

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
        //从摄像头读取视频
        VideoCapture capture("zhang.mp4");
        //循环显示每一帧
        while(1){
                Mat frame;//定义一个Mat变量,用于存储每一帧的图像
                capture >> frame;//读取当前帧
                if(frame.empty())//播放完毕,退出
                        break;
                imshow("读取视频帧",frame);//显示当前帧
                waitKey(30);//掩饰30ms
        }
        system("pause");
        return 0;
}

编译:

g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`

查看:

 已经生成了test2可执行文件

运行:

./test2

 

3.录制视频

创建一个test3.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;
}

 编译:

g++ test3.cpp -o test3 `pkg-config --cflags --libs opencv`

 

运行:

./test3

 

 查看code文件里的内容:

 

 五. 总结

这次实验让我更清楚了ubuntu虚拟机的apt-get等安装命令,也更加了解安装、编译、运行过程中各种可能出现的问题和解决方案。安装opencv没有什么太大的问题,但是再过程中环境配置总是出现各种问题,依赖包下载出现的问题最大,因此我还需要更加努力学习,对于opencv学习更深入。

六. 参考链接

Linux下安装opencv.3.4.15并初步使用

终端下载失败解决方法
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下安装opencv.3.4.15并初步使用 的相关文章

  • C语言 该日是该年的第几天(考虑闰年)

    给出日期 xff08 年月日 xff09 xff0c 计算该日是该年的第几天 xff08 需考虑是否是闰年 xff09 文章目录 前言一 逻辑演示部分 xff08 判断闰年 xff09 二 代码部分 1 代码示例2 输出演示总结 一 判断是
  • manila,barbican,cloudkitty服务的基本使用

    目录 Manila服务安装与使用Barbican服务安装与使用Cloudkitty服务安装与使用 Manila服务安装与使用 安装服务后创建default share type共享类型 不使用驱动程序支持 接着创建一个大小为2G的共享存储名
  • OpenCV计算机视觉(四) —— 图像的阈值处理与自适应阈值Otsu

    阈值处理是指剔除图像内像素高于阈值或者低于阈值的像素点 图像的阈值处理主要是设置一个阈值 xff1a 大于这个数赋予一个值 xff0c 小于一个数赋予另一个值 xff0c 将图片的像素值变成两个灰度值数中间的一个 xff0c 实现图像的分割
  • 基于C++ 的ASK数字通信系统仿真

    首先指明 xff1a 这是我大三时的一个课程设计 xff0c 希望对你有一定的指导意义 一 数字通信系统 在本次数字通信系统仿真中需要的课程基础主要有 xff1a 通信原理 xff0c 数字信号处理 xff0c C 43 43 语言程序设计
  • Hadoop集群配置

    伪分布集群安装 配置环境 linux系统 xff1a Centos7 虚拟机 xff1a VMware Workstation 16 Pro 一台Linux机器 xff0c 也可以称为是一个节点 xff0c 上面安装的有JDK环境 最上面的
  • 基本选择器

    jQuery基本选择器 span class token operator lt span script type span class token operator 61 span span class token string 34 t
  • 更改Windows的鼠标滚动方式为Mac方式(win鼠标滚轮反向)

    更改Windows的鼠标滚动方式为Mac方式 xff08 win鼠标滚轮反向 xff09 将Windows的滚动方向更改成和Mac一致的 自然 滚动 用习惯Mac系统偶尔用Windows xff0c 或者在Mac和Win之间倒腾来倒腾去的同
  • Java面试题

    Java面试题 并发面试题 集合面试题 一 Java基础 1 JDK和JRE有什么区别 JDK xff1a Java Development Kit 的简称 xff0c java 开发工具包 xff0c 提供了 java 的开发环境和运行环
  • VM虚拟机使用(文末有系统镜像)

    目录 前言 1 创建虚拟机 2 分盘操作 3 安装系统 4 备份 前言 本篇文章笔者详细述说了虚拟机的使用 xff0c 安装的是xp系统 xff0c 文末链接里面有xp与win7的系统镜像 若有问题 xff0c 希望大家斧正 xff08 手
  • linux必知必会-du命令

    du命令 du命令简介 du命令是linux系统里的文件大小查看的命令 du命令的应用场景十分广泛 xff1a 需要查看单个目录里面多个文件总大小 需要查看目录中每个文件的大小以及每个子文件夹中文件的大小 查看日志文件的大小 查看文件大小并
  • 解决在Ubuntu中设置了共享文件却找不到的原因

    可以看到我们在进入共享文件夹的时候 xff0c 并没有找到我们想要的文件 但文件夹里面是实实在在有文件的 解决方法 sudo vmhgfs fuse host mnt hgfs o nonempty o allow other 这个解决方法
  • python斐波那契数列

    基础python题 斐波那契数列 斐波那契数列指的是这样一个数列 xff1a 0 xff0c 1 1 xff0c 2 3 xff0c 5 8 xff0c 13 21 34 55 89 144 233 377 610 987 1597 题目分
  • python经典猴子偷桃

    猴子偷桃 题目 猴子吃桃问题 xff1a 猴子第一天摘下若干个桃子 xff0c 当即吃了一半 xff0c 还不瘾 xff0c 又多吃了一个第二天早上又将剩下的桃子吃掉一半 xff0c 又多吃了一个 以后每天早上都吃了前一天剩下的一半零一个
  • python分解质因数

    分解质因数 题目 题目 将一个整数分解质因数 例如 xff1a 输入90 打印出90 61 233 5 程序分析 根本不需要判断是否是质数 xff0c 从2开始向数本身遍历 xff0c 能整除的肯定是最小的质数 代码如下 target sp
  • C语言学习笔记——数组

    数组 eg xff1a 使用数组保存数据 使用数组保存用户输入的数据 当输入完毕后逆向输出数据 span class token macro property span class token directive keyword inclu
  • c语言基础——一维数组的应用

    C语言基础 一维数组的应用 例如 在一个学校的班级中会有很多学生 此时就可以使用数组来保存这些学生的姓名 以便进行管理 eg xff1a 用数组保存学生姓名 本示例每一个元素都应该是可以保存字符串的类型 这里使用字符指针类型 span cl
  • c-起泡法

    起泡法 这个算法的名字由来是因为越小的元素会经由交换慢慢 浮 到数列的顶端 xff08 升序或降序排列 xff09 xff0c 就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样 xff0c 故名 冒泡排序 比较相邻的元素 如果第一个比第二
  • c++字符串连接

    编写一个程序 xff0c 将两个字符串连接起来 xff0c 结果取代第一个字符串 要求用string方法 int main int a b cin gt gt a gt gt b sort a b cout lt lt a lt lt 34
  • 用new调用函数的四步走

    JS规定 xff0c 使用new调用函数会进行四步走 xff1a 1 函数体内会自动创建出一个空白对象 2 函数的上下文 xff08 this xff09 会自动指向这个对象 3 函数体内的语句会执行 4 函数会自动返回上下文对象 xff0
  • P1786 帮贡排序

    题目背景 在absi2011的帮派里 xff0c 死号偏多 现在absi2011和帮主等人联合决定 xff0c 要清除一些死号 xff0c 加进一些新号 xff0c 同时还要鼓励帮贡多的人 xff0c 对帮派进行一番休整 题目描述 目前帮派

随机推荐

  • vim如何提高效率:使用jk绑定Esc

    vim使用jk绑定Esc 为什么要使用jk绑定Esc vim的精华就在于几个基本的模式插入模式 底行模式 可视模式 xff0c 命令模式 正是因为这几个模式的存在让vim效率极高 虽然如此 xff0c 经常使用vim的人不难体会到从插入模式
  • Docker 安装mysql 解决中文乱码,数据持久化进入本地

    目录 一 xff1a 简单版的 xff08 没有持久化 xff0c 有乱码 xff0c 直接run 的容器实例 xff09 1 拉取镜像到本地 2 安装运行简单版 2 1 验证使用 xff0c 建库建表插入数据 2 2外部Win10也来连接
  • python中while语句

    一 while语句 1语法 xff1a while 条件 条件成立重复执行的代码1 条件成立重复执行的代码2 运用while语句需要注意 xff1a 1 初始值 2 跳出while的条件 3 计数器的变化 xff08 自增自减等等 xff0
  • SPSS数据分析

    第一题 表1 居民健康状况调查情况 编号 身高 xff08 cm xff09 体重 xff08 kg xff09 代谢综合征 性别 胆固醇 xff08 mmol L xff09 1 173 0 87 5 0 0 4 17 2 168 0 7
  • HA高可用集群文档搭建

    HA高可用集群文档搭建 准备工作 1 准备好三台虚拟机分别为hadoop01 hadoop02 hadoop03 创建安装包以及安装后的文档文件夹 span class token punctuation span root 64 hado
  • Python 计算机视觉(十三)—— 图像的傅里叶变换

    参考的一些文章以及论文我都会给大家分享出来 链接就贴在原文 xff0c 论文我上传到资源中去 xff0c 大家可以免费下载学习 xff0c 如果当天资源区找不到论文 xff0c 那就等等 xff0c 可能正在审核 xff0c 审核完后就可以
  • this的指向、工厂方法创建函数、构造函数

    一 this的指向 耐心看完 xff0c 这个彻底理解 xff0c 才不会成为一时的记忆 1 我们先来看函数的参数 xff1a function fn a b 形参 console log a b a 1 b 2 fn 1 2 实参 这没有
  • Minimum Sum ( 单调栈 )

    Minimum Sum xff08 AtCoder agc005 b xff09 Problem Statement One day Snuke was given a permutation of length N a1 a2 aN fr
  • F623光猫超级管理员密码获取

    中兴F623光猫超级管理员密码获取 事前说明 如果你不熟悉光猫的操作 xff0c 请勿修改或拆解任何与光猫有关的命令 零件 网线等 操作有风险 xff0c 运行需谨慎 光猫型号 xff1a ZXHN F623 所属运营商 xff1a 中国移
  • python制作字符动画

    字符动画从零制作 先展示一下效果吧 badapple 对动画有了解的人应该知道 xff0c 动画看起来是流畅的动作 xff0c 但其实是连续快速播放一张张图片 xff0c 欺骗眼睛达到的效果 xff0c 字符动画也是这样的原理 xff0c
  • 删除顺序表中相同元素

    删除顺序表中相同元素 题目 任意输入一长度为n的非递减数组 请设计算法删除其中的相同元素 方法 双指针判别 xff0c 具体看代码 xff1a span class token macro property span class token
  • 《Vim实用技巧(第2版)》学习笔记:技巧62-用寄存器中的内容替换高亮选区的内容

    技巧62 用寄存器中的内容替换高亮选区的内容 在可视模式下使用p命令时 xff0c Vim将用指定的寄存器内容来替换高亮选区中的文本 可以解决弄丢了复制内容的问题把删除和粘贴合成了一步 xff0c 不需要先删除高亮选区的内容再粘贴 无名寄存
  • 蓝桥杯 算法提高 最小字符串

    试题 算法提高 最小字符串 时间限制 xff1a 2 0s 内存限制 xff1a 256 0MB 问题描述 给定一些字符串 只包含小写字母 xff0c 要求将他们串起来构成一个字典序最小的字符串 输入格式 第一行T 表示有T组数据 接下来T
  • 哈夫曼编码/译码器

    哈夫曼编码 译码器 题目 哈夫曼编码 译码器 利用哈夫曼编码进行信息通信可以大大提高信道利用率 xff0c 缩短信息传输时间 xff0c 降低传输成本 但是 xff0c 这要求在发送端通过一个编码系统对待传数据预先编码 xff0c 在接收端
  • C/C++实数按精度输出

    C语言实现方法 调用 lt stdio h gt 库的printf函数实现 printf m nf answer 中m表示指定列宽 xff0c n表示保留小数个数 xff08 注意 xff1a 它不能自动四舍五入 xff09 include
  • ++i为啥比i++好

    43 43 i 的实现 43 43 i 表示先将 i 的值加 1 xff0c 再使用增加后的值 前置 xff08 43 43 i xff09 返回引用且不产生临时对象 span class token comment 43 43 i 以in
  • C++可变参数函数模板和可变参数类模板

    1 可变参数函数模板 1 1 定义 可变参数函数模板指的是接受任意数量和类型的参数的函数模板 xff0c 它具有语法上的可变参数 xff0c 因此可以用于实现各种通用算法和容器 定义可变参数函数模板需要使用模板参数包 xff08 templ
  • 守护进程、僵尸进程、孤儿进程

    守护进程 僵尸进程 孤儿进程 守护进程 xff08 Daemon Process xff09 定义 守护进程又称Daemon进程 xff08 精灵进程 xff09 xff0c 是Linux中的后台服务进程 它的生命周期较长 xff0c 通常
  • Python操作邮箱发送邮件(网易邮箱)

    以网易邮箱为例 xff1a 准备工作 xff1a 1 xff09 首先进入网页版网易邮箱 xff0c 点击设置 2 xff09 点击 xff0c POP3 SMTP IMAP 3 xff09 开启 IMAP SMTP服务 和 POP3 SM
  • Linux下安装opencv.3.4.15并初步使用

    目录 一 opencv简介 二 下载安装opencv 1 下载opencv 2 使用cmake安装opencv 3 安装cmake 4 安装依赖库 创建build文件夹 xff0c 再进入文件夹 使用cmake编译参数 3 使用make创建