首页 > 其他分享 >将mjpg格式数转化成opencv Mat格式

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

时间:2023-12-25 12:37:03浏览次数:25  
标签:mjpeg Mat mjpg buf 解码 格式 v4l2


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

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);
	}

转换成功:

将mjpg格式数转化成opencv Mat格式_数据转换


标签:mjpeg,Mat,mjpg,buf,解码,格式,v4l2
From: https://blog.51cto.com/u_15316847/8965539

相关文章

  • Codeforces1917E - Construct Matrix
    Codeforces1917E-ConstructMatrix首先考虑因为\(n\)为偶数,所以\(k\)为奇数时不可能满足条件。其次,如果\(4|k\),那么实际上在矩阵中一直放\(2\times2\)的全为\(1\)的矩阵就可以了。随后,如果\(k\equiv2\mod4\),那么可以证明如果\(k\ne2\landk\nen^2-2\),......
  • Flutter中 关于package:flutter/cupertino.dart和package:flutter/material.dart的区
    import'package:flutter/cupertino.dart';和import'package:flutter/material.dart';这两个语句分别用于导入Flutter框架中的不同部分,而且它们通常用于创建不同风格的用户界面。1.import'package:flutter/material.dart';:这是导入Material部分的语句,Material是一种设计......
  • java读取yaml文件并转化成json格式数据
    一、在maven项目中导入依赖<!--yaml文件转化成json格式--><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.29</version></de......
  • 推荐给程序员的chrome扩展插件:gitzip for github下载单个GitHub仓库中的文件;json-hand
    推荐清单gitzipforgithub下载单个GitHub仓库中的文件双击文件,勾选文件前面的复选框,可以一次性选择多个文件json-handle格式化json......
  • kettle从入门到精通 第二十六课 再谈 kettle Transformation executor
     1、前面文章有学习过Transformationexecutor ,但后来测试kettle性能的时候遇到了很大的问题,此步骤的处理性能太慢,导致内存溢出等问题。所以再次一起学习下此步骤的用法。 2、 如下图中rds-sametable-同步逻辑处理使用的是Transformationexecutor步骤,最后Speed列表示处理速......
  • numpy、scipy、pandas、matplotlib的读书报告
    1、NumpyNumPy(NumericalPython)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:一个强大的N维数组对象ndarray。广播功能函数。整合C/C++/Fortran代码......
  • 视频监控LiteCVR可视化云平台接口支持获取视频帧率与编码格式
    2023年,AI视频监控技术迎来了显著的发展和成果,为安全领域和其他行业带来更智能、高效的解决方案,其中边缘AI发展也十分显著。边缘计算中AI的广泛应用将使设备能够在本地处理数据,而不必依赖云服务器,从而实现更快的响应时间和更强的隐私保护。 LiteCVR可支持设备通过国标GB28181、......
  • Spring工具类--路径匹配(AntPathMatcher)--使用/实例
    原文网址:Spring工具类--路径匹配(AntPathMatcher)--使用/实例_IT利刃出鞘的博客-CSDN博客简介整个Spring(SpringBoot)框架的路径解析都是按照Ant的风格来的,比如:Controller的请求路径、文件路径、包的路径。所以,掌握Ant的路径匹配很重要。Spring中的具体实现:org.springframewor......
  • C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序
    https://www.cnblogs.com/s0611163/p/11872484.html测试结果整理后: 结论:1、这几个工具中,protobuf-net序列化和反序列化效率是最快的2、BinaryFormatter和Newtonsoft.Json反序列化慢的比较多3、Newtonsoft.Json序列化后的文件体积比较大4、Newtonsoft.Json在序列化反序列......
  • Python JSON格式字符串与对象之间的转换多种方法
    ​ 1、json.dumps()和json.loads()方法使用 json.dumps() 方法将Python对象转换为JSON格式字符串。使用 json.loads() 方法将JSON格式字符串解析为Python对象。使用示例:PythonJSON格式字符串与对象之间的转换多种方法-CJavaPy2、json.dump()和json.load(......