ubuntu22.04下用opencv4.5.4访问照片、视频、摄像头

news2024/11/24 11:38:00

本文主要记录近期在学习opencv使用过程中的一些细节

前言:ubuntu22.04 OpenCV4.6.0(c++)环境配置

opencv的安装过程可参考下面博文,亲测有效(容易出现问题的地方在安装下面依赖的时候,一般会出现报错,需要自己换源,否则后面可能会出现打不开照片或者打开照片是空白的问题)

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev  

博文参考:(3条消息) ubuntu22.04 OpenCV4.6.0(c++)环境配置_路飞DoD的博客-CSDN博客

一、查看opencv版本

运行终端,输入下面指令,查看opencv版本

pkg-config --modversion opencv4

会出现下面情况,这里我的opencv版本是4.5.4(不同版本信息显示不同)

 若下面指令查询不到,可能是opencv版本问题,可以输入下面命令查看

pkg-config opencv --modversion

二、用c++访问opencv库访问照片,视频,摄像头拍照

在home目录新建文件夹digital

cd digital   //进入digital

touch CMakeLists.txt   //创建cmake编译文本

mkdir -p build    //创建build 文件夹,用于生成系统所需构建文件

mkdir -p img     //创建img文件夹,用于存放照片,视频

mkdir -p src      //创建src文件夹,用于存放cpp文件

这里先通过下面指令显示我实现后digital 的二层目录

tree -L 2

CMakeLists.txt内容(cmake构建opencv项目)

cmake_minimum_required(VERSION 2.8) //最低版本
project( digital )                   //项目名称
find_package( OpenCV REQUIRED )     //添加opencv库到本项目
include_directories( ${OpenCV_INCLUDE_DIRS} ) //添加opencv头文件路径
add_executable( demo src/demo.cpp )         //添加可执行文件
add_executable( demo1 src/demo1.cpp )       //这里对应三个cpp
add_executable( demo2 src/demo2.cpp )        //即访问照片、视频、摄像头
target_link_libraries( demo ${OpenCV_LIBS} ) //链接opencv库到可行性文件
target_link_libraries( demo1 ${OpenCV_LIBS} )
target_link_libraries( demo2 ${OpenCV_LIBS} )

demo.cpp内容(opencv访问照片)

#include <opencv2/opencv.hpp>
#include <iostream>

int main(int argc, char** argv)
{
    // 读取图片
    cv::Mat image = cv::imread("/home/zyf/digital/img/yunyun.jpg");//自己的照片

    // 确认图片读取成功
    if(image.empty())
    {
        std::cerr << "Failed to open image file." << std::endl;
        return -1;
    }
    //控制照片比例
   resize(image, image, cv::Size(500, 500));
    // 显示图片
    cv::imshow("Image with Box", image);

    // 等待按键
    cv::waitKey(0);

    return 0;

demo1.cpp内容(opencv访问视频)

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    // 打开视频文件
    VideoCapture cap("/home/zyf/digital/img/video.mp4");//自己的视频文件

    // 检查视频是否成功打开
    if (!cap.isOpened())
    {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    // 循环读取视频帧
    while (true)
    {
        Mat frame;
        // 读取当前帧
        cap >> frame;

        // 检查是否成功读取帧
        if (frame.empty())
            break;

        // 显示当前帧
        imshow("Frame", frame);

        // 按下 Esc 键退出循环
        if (waitKey(25) == 27)
            break;
    }

    // 释放VideoCapture对象和所有窗口
    cap.release();
    destroyAllWindows();

    return 0;
}

demo2.cpp内容(opencv访问摄像头)

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

int main()
{
    // 打开默认摄像头
    VideoCapture cap(0);
    if (!cap.isOpened())
    {
        cout << "无法打开摄像头!" << endl;
        return -1;
    }

    namedWindow("摄像头", WINDOW_NORMAL);

    while (true)
    {
        Mat frame;
        cap >> frame;

        // 显示视频帧
        imshow("摄像头", frame);

        // 按下空格键拍照
        if (waitKey(30) == ' ')
        {
            // 生成文件名
            time_t now = time(NULL);
            tm *ltm = localtime(&now);
            string filename = to_string(ltm->tm_year + 1900) + "-" + to_string(ltm->tm_mon + 1) + "-" + to_string(ltm->tm_mday) + "-" + to_string(ltm->tm_hour) + "-" + to_string(ltm->tm_min) + "-" + to_string(ltm->tm_sec) + ".jpg";

            // 保存图片
            imwrite(filename, frame);
            cout << "已保存照片:" << filename << endl;
        }
    }

    return 0;
}

编译实现

cd build                  //进入build文件夹
cmake ..
make

cmake ..                                       //cmake编译,生成makefile等文件

make                                           //编译,生成可执行文件

 

此时我们可以看到在build目录会生成可执行文件

运行可执行文件 

./demo     //执行demo  
./demo1     //执行demo1   
./demo 2    //执行demo2   

./demo  opencv访问照片

 ./demo1  opencv访问视频

 ./demo2  opencv访问摄像头

空格拍照获取一帧数据,.jpg文件

注意: 这里Linux访问摄像头可能出现黑面现象,先在window访问相机出现下面情况

 解决方法:

1.安装cheese

重启电脑

在VMware的工具栏选择虚拟机>可移动设备>摄像头>连接。
执行:sudo apt-get install cheese
运行:cheese(一般可以看到图像)

2、如发现cheese界面弹出后,图像是黑屏,但是摄像头连线无误,按钮都处于不可操作状态,需要检查几个部分:

       lsusb查看一下是否有找到摄像头。
  ls /dev | grep video,查看是否有video0。
  如以上两点都有,需要检查的部分是虚拟机设置>usb控制器>usb兼容性>(usb2.0/3.0)。如果当前选中的是2.0就选择3.0,如果当前选中的是3.0就选择2.0。然后确定。
  在VMware的工具栏选择虚拟机>可移动设备>摄像头>断开连接。然后再虚拟机>可移动设备>摄像头名>连接。然后重新打开cheese,发现已经有图像了。

总结:

opencv在linux需要先经过cmake编译安装才能使用,以及下载依赖库,同时还需要配置路径,过程还是有点麻烦,要注意的点是依赖包的下载和路径的配置。

参考文献:

(3条消息) 解决虚拟机下Ubuntu cheese黑屏问题_ubuntu20.04无法打开cheese_cocoaqin的博客-CSDN博客

ubuntu22.04 OpenCV4.6.0(c++)环境配置_路飞DoD的博客-CSDN博客

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

让你不再疑惑音频如何转文字

随着科技的不断发展&#xff0c;我们现在可以通过各种智能设备来轻松地录制音频。但是&#xff0c;当我们需要将音频中的内容转换成文字时&#xff0c;该怎么办呢&#xff1f;这时候&#xff0c;转换工具就派上用场了&#xff01;那么你知道音频怎么转文字吗&#xff1f;接下来…

CSS2学习笔记

一、CSS基础 1.CSS简介 CSS 的全称为&#xff1a;层叠样式表 ( Cascading Style Sheets ) 。CSS 也是一种标记语言&#xff0c;用于给 HTML 结构设置样式&#xff0c;例如&#xff1a;文字大小、颜色、元素宽高等等。简单理解&#xff1a; CSS 可以美化 HTML , 让 HTML 更漂亮…

【产品经理】成熟产品狗必备特质

在自己从事产品经理这个职位的3年间&#xff0c;看过不少产品经理成长相关的文章书籍&#xff0c;涵盖了挺多经验、素质、能力&#xff0c;平时工作中也会注意学以致用&#xff0c;所以每每回顾此事&#xff0c;都觉得这对自己的工作、个人成长起到了莫大的推进作用。 1、外部合…

Docker是什么、有什么用的介绍

文章目录 1.背景2. Docker 是什么&#xff1f;3.Docker 容器与虚拟机的区别4.Docker 的 6 大优势1、更高效地利用系统资源2、更快的启动时间3、一致的运行环境4、持续交付和部署5、更轻松迁移6、更轻松的维护和拓展 小结 知识搬运工&#xff1a; 原文出自&#xff1a; 原文链接…

网络渗透技术如何自学,自学黑客要多久

学习网络渗透技术是一件靠兴趣驱动的事情&#xff0c;只有强烈热爱一件事才能持之以恒的去做&#xff0c;对于那些三分钟热度的人来说还是劝你放弃吧&#xff0c;因为网络渗透技术自学需要很多方面的知识&#xff0c;没耐心是无法学会的&#xff0c;当然除了有想要学习的决心之…

企业研发提效抓手,揭秘云原生的效能“奇点”

导语 | 在云原生时代&#xff0c;研发效能治理面临新的挑战&#xff0c;同时也获得了新的视角。如何更好地利用云原生技术的优势&#xff0c;从而在根本上提升研发效能&#xff0c;已成为许多企业数字化转型过程中的“必答题”。今天&#xff0c;我们特别邀请了 Thoughtworks 创…

Git操作方法

目录 Git是什么 Git特点 Git作用 Git原理 集中式 分布式 Git安装 修改语言 Git操作 1.初始化Git仓库 2.提交工作区的内容到版本库 3.查看版本记录 4.版本回退 5.版本前进 Git 命令 通用操作 工作状态 版本回退 版本前进 远程仓 1.GitHub 2.GitLab 3.码云…

Amp it up翻译(持续更新)

最近闲来无事&#xff0c;看到了阮一峰在推荐这本书&#xff0c;无奈是英文的&#xff0c;但是机器翻译过来又看不懂。反正自己看的时候也要翻译。于是就自己看的时候&#xff0c;翻译完&#xff0c;理解完顺便写上去&#xff0c;给懒的同学看一下。 书的目录 书的目录太长了&…

C语言---自定义类型:结构体,枚举,联合

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;凡人修C传 &#x1f4ac;总结&#xff1a;希望你看完之后&…

FANUC机器人PROFIBUS DP通信配置方法

FANUC机器人PROFIBUS DP通信配置方法 1. 前提条件: 机器人Profibus功能确认:确认机器人是否加装了Profibus功能。按下示教器MENU—Setup,可查看是否已安装所需的软件,如下图所示,说明已安装profibus功能。 西门子PLC一侧需要安装对应的GSD文件,可从以下链接获取: FANU…

JDBC Utils 详解(通俗易懂)

目录 一、前言 二、JDBCUtils说明 1.背景及起因 : 2.示意图 : 3.JDBCUtils类的定义 三、JDBCUtils应用 1.DML的应用 : 2.DQL的应用 : 四、总结 一、前言 第三节内容&#xff0c;up主要和大家分享一下JDBC Utils方面的内容。注意事项——①代码中的注释也很重要&#x…

暴力递归到动态规划(三)

⭐️前言⭐️ 本篇文章是从暴力递归到动态规划的第三章。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及…

chatgpt赋能python:Python快速创建列表

Python快速创建列表 在Python编程中&#xff0c;列表是一种非常常见的数据类型&#xff0c;它可以容纳多个值。创建列表有多种方式&#xff0c;但是在不同场景下&#xff0c;我们需要使用不同的方法来创建一个高效的列表。本文主要介绍如何快速创建列表的不同方法。我们将深入…

K-verse 合作伙伴访谈|与 Studio Dragon 一起进入韩剧元宇宙世界

穿越时空的韩剧元宇宙。 Studio Dragon 是全球排名第一的生活创作者 CJ ENM 的子公司&#xff0c;是引领韩剧的韩国代表性戏剧工作室&#xff0c;一个以无限故事内容让世界着迷的优质故事讲述者。 通过与 The Sandbox 的合作&#xff0c;我们将提供一种全新体验&#xff0c;让用…

openGauss5.0企业版使用指南之系统架构

文章目录 1. 产品定位2. 3.x版本和5.x版本比对3. openGauss 5.0版本架构4. openGauss 5.0 特点 背景&#xff1a;今年3月openGauss 5.0发布&#xff0c;升级了资源池化内核能力和DataKit数据全生命周期管理工具&#xff0c;整体在性能、安全性与易用性方面均有大幅提升。本次大…

vue-admin-template_home增加全屏开关

1. 安装 npm install screenfull --save 这个指令安装最新版本 npm install screenfull3 VUE2.x的可以指定对应的版本&#xff0c;这样是安装最新的3.x的版本 2. 导入svg文件 在src\icons\svg文件夹下&#xff0c;导入exit-fullscreen.svg和fullscreen.svg, exit-fullsc…

Git仓库相关操作

目录 Git作用 集中式 分布式 Git操作Git区域概念 Git命令 远程仓库 新建项目 新建仓库 克隆项目 推送项目 拉取项目 Git作用 作用&#xff1a;版本控制多人协作 集中式 典型代表&#xff1a;SVN 特点&#xff1a;所有的版本库都存在中央服务器&#xff0c;本地备份…

线性代数3:矩阵

目录 矩阵研究的是什么呢&#xff1f; 逆阵 什么叫做逆阵&#xff1f; 例题1&#xff1a; 例题2&#xff1a; 逆阵的存在性 定理1&#xff1a; 定理2&#xff1a; 定理3&#xff1a; 定理4&#xff1a; 拉普拉茨方程 方阵可以的条件 例题3&#xff1a; Note1&#xff…

Hive 巡检工具-对表数据量、主键重复数量以及每个字段标签的空值检测

目录 背景 巡检工具 数据准备 1、准备一张配置信息表&#xff0c;该表保存需要巡检的数据信息&#xff08;规则code不可重复&#xff09; 2、pyspark代码编写 结果表数据展示 规则自动检测并自增 数据准备 背景 该需求是利用pyspark对部分重点产出表进行数据质量监控。主…

如何使用二三层仪表模拟无状态的DDOS攻击测试

什么是DDOS攻击 分布式拒绝服务攻击(Distributed Denial of Service&#xff0c;简称DDoS)是指通过大规模互联网流量淹没目标服务器或其周边基础设施&#xff0c;以破坏目标服务器、服务或网络正常流量的恶意行为。 大量虚假的用户占用网络资源&#xff0c;把资源耗尽&#x…