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

将mjpg格式数转化成opencv Mat格式

该博客可以解决如下两个问题:

1、将mjpg格式数据转化成opencv Mat格式
2、v4l2_buffer 格式获取的mjpg格式数据转换成Mat格式。

要将 MJPEG 格式的数据转换为 OpenCV 的 Mat 格式,您可以使用 imdecode 函数。imdecode 函数可以将图像数据解码为 Mat 对象。以下是一个示例代码,演示了如何将 MJPEG 格式的数据转换为 Mat 格式:

#include <opencv2/opencv.hpp>
#include <vector>// 假设 mjpeg_data 是存储 MJPEG 数据的字节数组
// 假设 mjpeg_data_size 是 MJPEG 数据的大小// 将 MJPEG 数据转换为 Mat
std::vector<uchar> mjpeg_vec(mjpeg_data, mjpeg_data + mjpeg_data_size);
cv::Mat frame = cv::imdecode(mjpeg_vec, cv::IMREAD_COLOR);// 检查是否成功解码
if (frame.empty()) {// 解码失败std::cout << "Failed to decode MJPEG data." << std::endl;
} else {// 解码成功,可以对图像进行处理或显示cv::imshow("MJPEG", frame);cv::waitKey(0);
}

在上述代码中,我们首先将 MJPEG 数据存储在 std::vector 类型的容器 mjpeg_vec 中。然后,我们使用 imdecode 函数将 mjpeg_vec 中的数据解码为 Mat 对象。cv::IMREAD_COLOR 参数指定解码后的图像类型为彩色图像。

请注意,imdecode 函数返回的 Mat 对象可能为空(empty),这表示解码失败。因此,我们在代码中进行了空检查。如果解码成功,则可以对图像进行进一步处理或显示。

我自己的代码,是通过如下方式转换的:

struct v4l2_buffer v4l2_process_buf;
v4l2_process_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
v4l2_process_buf.memory = V4L2_MEMORY_MMAP;
...// 4、 循环采集图像
while (1)
{res = ioctl(fd, VIDIOC_DQBUF, &v4l2_process_buf);...std::vector<uchar> mjpeg_vec((char *)frm_base[v4l2_process_buf.index], (char *)frm_base[v4l2_process_buf.index] + v4l2_process_buf.bytesused);frame = cv::imdecode(mjpeg_vec, cv::IMREAD_COLOR);// 检查是否成功解码if (frame.empty()){// 解码失败std::cout << "Failed to decode MJPEG data." << std::endl;return EXIT_FAILURE;}else{cv::resize(frame, resizedImage, newSize);cv::namedWindow("frame", 0);cv::imshow("frame", resizedImage);cv::waitKey(1);}

转换成功:

在这里插入图片描述

http://www.lryc.cn/news/262249.html

相关文章:

  • 【golang/g3n】3D游戏引擎G3N的windows安装与测试
  • sap table 获取 valuation class MBEW 查表获取
  • 介绍一些操作系统—— Ubuntu 系统
  • React中props 和 state异同初探
  • spring-kakfa依赖管理之org/springframework/kafka/listener/CommonErrorHandler错误
  • 基于go语言开发的海量用户及时通讯系统
  • 19.Oracle 中count(1) 、count(*) 和count(列名) 函数的区别
  • C 库函数 - time()
  • 基于Python数据可视化的网易云音乐歌单分析系统
  • Jenkins----基于 CentOS 或 Docker 安装部署Jenkins并完成基础配置
  • flume系列之:监控flume agent channel的填充百分比
  • 信息安全和网络安全的区别
  • 【开源项目】WPF 扩展 -- 多画面视频渲染组件
  • risc-v system instruction
  • 08 v-text指令
  • vite基本知识
  • 考研真题c语言
  • neuq-acm预备队训练week 9 P8604 [蓝桥杯 2013 国 C] 危险系数
  • 【BIG_FG_CSDN】*VMware17pro*Linux*Redhit6网络管理(个人向——学习笔记)
  • Nginx location+Nginx rewrite(重写)(新版)
  • uniapp实现地图电子围栏功能
  • LeetCode第376场周赛
  • 数据仓库与数据挖掘小结
  • ensp创建配置环境,实现全网互访
  • 智能优化算法应用:基于JAYA算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • ripro后台登录后转圈和图标不显示的原因及解决方法
  • android 源码编译android 12
  • CSS第二天导读
  • scroll-behavior属性使用方法
  • Python Django 连接 PostgreSQL 操作实例