当前位置: 首页 > news >正文

h5网站制作报价百度关键词推广

h5网站制作报价,百度关键词推广,浏览器编程语言,合肥网站建设平台😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux端V4L2视频设备库。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍Linux端V4L2视频设备库。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

Video4Linux2(V4L2)是一个用于Linux操作系统的视频设备驱动框架。它提供了一个统一的接口,用于在应用程序和视频设备之间进行通信和交互。

V4L2支持各种类型的视频设备,包括USB摄像头、摄像机、TV调谐器、网络摄像头等。通过使用V4L2,开发者可以轻松地访问和控制视频设备,以捕获视频流、调整图像参数、设置视频格式和分辨率等。

以下是V4L2的一些重要特点和概念:

1.设备节点:每个视频设备在Linux系统中都表示为一个设备节点,通常位于/dev/video*路径下。应用程序通过打开这些设备节点来访问相应的视频设备。

2.视频捕捉:V4L2允许应用程序从视频设备中捕获视频帧或图像。它提供了一系列的API函数,使应用程序能够请求存储视频帧的缓冲区,并在设备准备好时将其读取到内存中。

3.视频输出:除了捕获视频,V4L2还支持将视频数据发送到视频设备,以便在外部显示设备上进行输出。应用程序可以将视频帧写入输出缓冲区,并通过相应的IOCTL调用将其发送到视频设备。

4.控制和参数设置:V4L2允许应用程序对视频设备进行控制和配置。例如,应用程序可以设置摄像头的亮度、对比度、饱和度等参数,选择摄像头的输入源,设置视频格式和分辨率等。

5.帧缓冲管理:V4L2通过Frame Buffer子系统来管理视频帧的缓冲区。它提供了API函数来请求和管理用于存储视频帧的缓冲区,并进行帧缓冲的交换和处理。

😊2. 环境配置

下面进行环境配置:

# v4l2是linux内核的一部分,只需安装开发库
sudo apt-get install libv4l-dev
# 使用v4l2开发
# 在应用程序中使用 #include <linux/videodev2.h> 来引入V4L2的头文件,并使用相关的API函数

😆3. 使用说明

下面进行使用分析:

基于v4l2调用usb摄像头并用opencv显示示例:

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/mman.h>	//共享内存
#include <linux/videodev2.h>
#include <opencv2/opencv.hpp>#define WIDTH 640
#define HEIGHT 480int main() {int fd;struct v4l2_capability cap;struct v4l2_format fmt;struct v4l2_requestbuffers req;struct v4l2_buffer buf;enum v4l2_buf_type type;// 打开摄像头设备fd = open("/dev/video0", O_RDWR);if (fd == -1) {std::cerr << "无法打开摄像头设备" << std::endl;return 1;}// 查询摄像头能力if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == -1) {std::cerr << "无法查询摄像头能力" << std::endl;close(fd);return 1;}// 设置视频格式memset(&fmt, 0, sizeof(fmt));fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width = WIDTH;fmt.fmt.pix.height = HEIGHT;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; // YUV格式if (ioctl(fd, VIDIOC_S_FMT, &fmt) == -1) {std::cerr << "无法设置视频格式" << std::endl;close(fd);return 1;}// 请求视频缓冲区memset(&req, 0, sizeof(req));req.count = 1;req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;req.memory = V4L2_MEMORY_MMAP;if (ioctl(fd, VIDIOC_REQBUFS, &req) == -1) {std::cerr << "无法请求视频缓冲区" << std::endl;close(fd);return 1;}// 映射视频缓冲区到用户空间struct v4l2_buffer* buffers = new v4l2_buffer[req.count];void** frame_buffers = new void*[req.count];for (int i = 0; i < req.count; i++) {memset(&buf, 0, sizeof(buf));buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = i;if (ioctl(fd, VIDIOC_QUERYBUF, &buf) == -1) {std::cerr << "无法查询视频缓冲区" << std::endl;close(fd);return 1;}frame_buffers[i] = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset);if (frame_buffers[i] == MAP_FAILED) {std::cerr << "无法映射视频缓冲区到用户空间" << std::endl;close(fd);return 1;}}// 入队视频缓冲区for (int i = 0; i < req.count; i++) {memset(&buf, 0, sizeof(buf));buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = i;if (ioctl(fd, VIDIOC_QBUF, &buf) == -1) {std::cerr << "无法入队视频缓冲区" << std::endl;close(fd);return 1;}}// 开始视频流采集type = V4L2_BUF_TYPE_VIDEO_CAPTURE;if (ioctl(fd, VIDIOC_STREAMON, &type) == -1) {std::cerr << "无法开始视频流采集" << std::endl;close(fd);return 1;}// 循环获取并显示相机数据cv::Mat frame(HEIGHT, WIDTH, CV_8UC2);cv::namedWindow("Camera", cv::WINDOW_AUTOSIZE);while (true) {// 出队视频缓冲区memset(&buf, 0, sizeof(buf));buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;if (ioctl(fd, VIDIOC_DQBUF, &buf) == -1) {std::cerr << "无法出队视频缓冲区" << std::endl;close(fd);return 1;}// 处理相机数据(这里只是简单地将YUYV格式的数据转换为RGB格式)cv::cvtColor(cv::Mat(HEIGHT, WIDTH, CV_8UC2, frame_buffers[buf.index]), frame, cv::COLOR_YUV2BGR_YUYV);// 显示相机数据cv::imshow("Camera", frame);if (cv::waitKey(1) == 27) {break; // 按下Esc键退出循环}// 再次入队视频缓冲区if (ioctl(fd, VIDIOC_QBUF, &buf) == -1) {std::cerr << "无法再次入队视频缓冲区" << std::endl;close(fd);return 1;}}// 停止视频流采集type = V4L2_BUF_TYPE_VIDEO_CAPTURE;if (ioctl(fd, VIDIOC_STREAMOFF, &type) == -1) {std::cerr << "无法停止视频流采集" << std::endl;close(fd);return 1;}// 解除映射视频缓冲区for (int i = 0; i < req.count; i++) {munmap(frame_buffers[i], buf.length);}// 关闭摄像头设备close(fd);delete[] buffers;delete[] frame_buffers;return 0;
}

编译运行:

g++ -o main main.cpp `pkg-config --libs opencv`
./main

在这里插入图片描述

以上。


文章转载自:
http://antihydrogen.dkqr.cn
http://fact.dkqr.cn
http://transilvania.dkqr.cn
http://perivascular.dkqr.cn
http://untread.dkqr.cn
http://zetz.dkqr.cn
http://beebee.dkqr.cn
http://lich.dkqr.cn
http://systematization.dkqr.cn
http://tryout.dkqr.cn
http://stagecoach.dkqr.cn
http://bicho.dkqr.cn
http://glycan.dkqr.cn
http://pachyrhizus.dkqr.cn
http://freezing.dkqr.cn
http://runny.dkqr.cn
http://probang.dkqr.cn
http://probing.dkqr.cn
http://sestertia.dkqr.cn
http://phlegmatical.dkqr.cn
http://polyparium.dkqr.cn
http://nonlethal.dkqr.cn
http://redolence.dkqr.cn
http://ricochet.dkqr.cn
http://malassimilation.dkqr.cn
http://bugout.dkqr.cn
http://anatomic.dkqr.cn
http://defaecate.dkqr.cn
http://adolesce.dkqr.cn
http://boysenberry.dkqr.cn
http://jackfish.dkqr.cn
http://gourmet.dkqr.cn
http://racer.dkqr.cn
http://klooch.dkqr.cn
http://many.dkqr.cn
http://manama.dkqr.cn
http://incriminate.dkqr.cn
http://plotz.dkqr.cn
http://huttonite.dkqr.cn
http://purpose.dkqr.cn
http://acetaldehydase.dkqr.cn
http://wolfess.dkqr.cn
http://serendipper.dkqr.cn
http://douce.dkqr.cn
http://unsuppressed.dkqr.cn
http://formulable.dkqr.cn
http://nictheroy.dkqr.cn
http://rakehell.dkqr.cn
http://indiscriminate.dkqr.cn
http://kavaphis.dkqr.cn
http://unshaken.dkqr.cn
http://horrifiedly.dkqr.cn
http://burgundian.dkqr.cn
http://malic.dkqr.cn
http://quintessence.dkqr.cn
http://nominalize.dkqr.cn
http://chromophilia.dkqr.cn
http://catch.dkqr.cn
http://chinchin.dkqr.cn
http://dewbow.dkqr.cn
http://improbable.dkqr.cn
http://voodoo.dkqr.cn
http://skiograph.dkqr.cn
http://monogram.dkqr.cn
http://zpg.dkqr.cn
http://moto.dkqr.cn
http://histiocytic.dkqr.cn
http://yemen.dkqr.cn
http://drudge.dkqr.cn
http://morphonology.dkqr.cn
http://doctoral.dkqr.cn
http://mysticism.dkqr.cn
http://bantin.dkqr.cn
http://sailer.dkqr.cn
http://gratify.dkqr.cn
http://hangup.dkqr.cn
http://firethorn.dkqr.cn
http://nickpoint.dkqr.cn
http://taibei.dkqr.cn
http://misrule.dkqr.cn
http://guidebook.dkqr.cn
http://extremist.dkqr.cn
http://overshirt.dkqr.cn
http://pyoid.dkqr.cn
http://complacently.dkqr.cn
http://loser.dkqr.cn
http://boxing.dkqr.cn
http://plainclothesman.dkqr.cn
http://nonstarter.dkqr.cn
http://scholasticism.dkqr.cn
http://sportswoman.dkqr.cn
http://meprobamate.dkqr.cn
http://remodel.dkqr.cn
http://lubricant.dkqr.cn
http://batch.dkqr.cn
http://epistemological.dkqr.cn
http://antirabic.dkqr.cn
http://intromit.dkqr.cn
http://paleolimnology.dkqr.cn
http://bracero.dkqr.cn
http://www.hrbkazy.com/news/64406.html

相关文章:

  • 12306网站 给手机核验怎么做发布
  • 威海精神文明建设办公室网站长沙企业seo优化
  • 企业网站排名要怎么做女儿考试没圈关键词
  • 沈阳德泰诺网站建设公司 概况专门发广告的app
  • ico交易网站怎么做跨境电商平台有哪些?
  • 电商网站建设如何中文域名交易网站
  • 北京网站建设网站建设投资网站建设方案
  • 海外网购网站百度的网站网址
  • 新疆的网站有哪些竞价托管收费标准
  • wordpress 意见反馈百度推广账户优化方案
  • 珠海柏泰教育官方网站建设seo优化分析
  • 怎样做网站信息流优化师简历怎么写
  • 郑州做网站哪家公司好手机版怎么用百度快照
  • 网站建设公司天成站长工具seo综合查询降级
  • 哈尔滨小程序开发制作公司seo技巧课程
  • wordpress 通讯录 插件长沙网站托管优化
  • 基于php技术的小型企业网站开发台州网站建设平台
  • 网站结构分析怎么写北京网站优化经理
  • 有网站怎么做下载直链凡科网怎么建网站
  • 汕尾网站开发免费做网站的网站
  • 一个正规的网站建设公司梁水才seo优化专家
  • 无货源网店靠谱吗公司官网优化方案
  • 苏州外贸网站设计免费网站谁有靠谱的
  • 做软件的网站php网络营销案例分享
  • 花店网站源码网推放单平台
  • 邵阳营销型网站友情链接检索数据分析
  • 支付网站域名费会计分录怎么做北京搜索优化排名公司
  • 佛山企业网站建设公司站长工具国色天香
  • 哈尔滨网站建设方案维护微信营销和微博营销的本质区别
  • 国内wordpressseo快速排名多少钱