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

本文主要记录近期在学习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                                           //编译,生成可执行文件

扫描二维码关注公众号,回复: 17200994 查看本文章

此时我们可以看到在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博客

猜你喜欢

转载自blog.csdn.net/m0_70987863/article/details/131131040