欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Linux 外设驱动 应用 6 摄像头采集实验 part2

Linux 外设驱动 应用 6 摄像头采集实验 part2

2025/4/17 21:06:23 来源:https://blog.csdn.net/huanghongqi11/article/details/144325765  浏览:    关键词:Linux 外设驱动 应用 6 摄像头采集实验 part2

摄像头采集实验

Part 1 Linux 外设驱动 应用 6 摄像头采集实验
Part 2 Linux 外设驱动 应用 6 摄像头采集实验


文章目录

  • 摄像头采集实验
  • 7 opecv介绍
  • 8 摄像头操作
    • 8.1 打开摄像头并显示视频流
    • 8.2 保存图像
    • 8.3 捕获视频平且保存
    • 8.4 获取摄像头属性
  • 9 查看摄像头索引号


7 opecv介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,旨在提供高效、实用的图像处理和计算机视觉功能。它最初由Intel公司开发,现由一个庞大的社区进行维护和更新。OpenCV广泛应用于实时图像处理、视频分析、机器学习等领域。

OpenCV的主要功能:
图像处理:

  • 图像滤波:如模糊、锐化、降噪等。
  • 几何变换:如旋转、缩放、裁剪、仿射变换、透视变换等。
  • 边缘检测:如Sobel、Canny算法。
  • 颜色空间转换:如RGB到灰度图、HSV转换等。

物体检测:

  • 人脸检测:通过Haar级联分类器或者深度学习方法进行人脸检测。
  • 特征点匹配:如ORB、SIFT、SURF等方法检测和匹配特征点。
  • 物体追踪:例如基于KLT算法、Meanshift和Camshift的追踪算法。

机器学习:

  • 分类算法:如支持向量机(SVM)、K近邻(k-NN)、决策树等。
  • 聚类算法:如K-means、层次聚类等。
  • 深度学习支持:OpenCV与TensorFlow、PyTorch、Caffe等深度学习框架兼容,支持图像分类、目标检测等任务。

视频分析:

  • 实时视频处理:支持视频的读取、显示和编辑。
  • 运动分析:如光流法、背景减除法、运动物体检测等。
  • 视频稳定:对视频进行去抖动处理。

三维重建与姿态估计:

  • 立体视觉:通过左右图像对来估计深度图。
  • 相机标定与姿态估计:估算相机的内参、外参,以及三维物体的姿态。
  • 三维物体重建:从2D图像推断物体的三维结构。

GUI和高级函数:

  • 提供图像、视频的显示功能。
  • 支持绘制图形,如矩形、圆形、文本等。

8 摄像头操作

在OpenCV中,操作摄像头主要使用cv2.VideoCapture类来实现。通过该类,你可以捕获来自摄像头的视频流,进行实时图像处理等操作。以下是一些常见的摄像头操作示例。

8.1 打开摄像头并显示视频流

最基本的操作是打开摄像头并显示实时视频流。你可以通过cv2.VideoCapture类来打开摄像头,使用read()方法获取每一帧图像,然后用imshow()显示。

#include <opencv2/opencv.hpp>
#include"cv.h"
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc,char* argv[])
{VideoCapture cap(1);if(!cap.isOpened()){cout<<"create camera capture error"<<endl;return -1;}Mat frame;while (true) {// 捕获每一帧cap >> frame;if (frame.empty()) {std::cerr << "无法获取视频帧" << std::endl;break;}// 显示视频帧cv::imshow("摄像头视频", frame);// 按'q'键退出if (cv::waitKey(1) == 'q') {break;}}cap.release();cvDestroyAllWindows();return 0;
}

添加Makefile 的opencv库

CFLAGS :=$(shell pkg-config --cflags opencv)
LBFLAGS :=$(shell pkg-config --libs opencv) -lstdc++

在这里插入图片描述

8.2 保存图像

// 保存图像cv::imwrite("captured_image.jpg", frame);std::cout << "图像已保存" << std::endl;

在这里插入图片描述

8.3 捕获视频平且保存

int main() {// 打开摄像头cv::VideoCapture cap(1);if (!cap.isOpened()) {std::cerr << "无法打开摄像头" << std::endl;return -1;}// 设置视频编解码器和输出文件cv::VideoWriter writer("output.avi", cv::VideoWriter::fourcc('X', 'V', 'I', 'D'), 30.0, cv::Size(640, 480));cv::Mat frame;while (true) {// 捕获每一帧cap >> frame;if (frame.empty()) {std::cerr << "无法获取视频帧" << std::endl;break;}// 保存视频帧writer.write(frame);// 显示视频帧cv::imshow("录制视频", frame);// 按'q'键退出if (cv::waitKey(1) == 'q') {break;}}cap.release();writer.release();cv::destroyAllWindows();return 0;
}

8.4 获取摄像头属性

	double width = cap.get(cv::CAP_PROP_FRAME_WIDTH);double height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);double fps = cap.get(cv::CAP_PROP_FPS);std::cout << "摄像头分辨率: " << width << "x" << height << std::endl;std::cout << "帧率: " << fps << " FPS" << std::endl;

9 查看摄像头索引号

 ls /dev/video*

或者

v4l2-ctl --list-devices

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词