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

OpenCV图像文件读写(4)解码图像数据函数imdecode()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

从内存缓冲区读取图像。
imdecode 函数从指定的内存缓冲区读取图像。如果缓冲区太短或包含无效数据,函数将返回一个空矩阵 (Mat::data==NULL)。

参见 cv::imread 了解支持的格式和标志的描述。

注意
在处理彩色图像的情况下,解码后的图像将按 B G R 顺序存储通道。

函数原型1


Mat cv::imdecode	
(InputArray 	buf,int 	flags 
)	

参数1

  • 参数buf:包含图像数据的字节数组。通常是一个 std::vector 类型的对象。
  • 参数flags:解码图像的标志,可以是以下值之一:
    • IMREAD_COLOR(默认):加载彩色图像。任何 alpha 通道都会被忽略。
    • MREAD_GRAYSCALE:以灰度模式加载图像。
    • MREAD_UNCHANGED:加载图像,包括 alpha 通道(如果有的话)。
    • IMREAD_ANYDEPTH:假设任何深度。
    • IMREAD_ANYCOLOR:假设任何颜色模式。
    • IMREAD_LOAD_GDAL:当从文件加载时,如果设置了此标志,则会使用 GDAL 库。
    • IMREAD_REDUCED_COLOR_2:加载图像,并将其缩小到原来的 1/2。
    • IMREAD_REDUCED_COLOR_4:加载图像,并将其缩小到原来的 1/4。
    • IMREAD_REDUCED_COLOR_8:加载图像,并将其缩小到原来的 1/8。
    • IMREAD_REDUCED_GRAYSCALE_2:加载图像,并将其缩小到原来的 1/2,并转换为灰度。
    • IMREAD_REDUCED_GRAYSCALE_4:加载图像,并将其缩小到原来的 1/4,并转换为灰度。
    • IMREAD_REDUCED_GRAYSCALE_8:加载图像,并将其缩小到原来的 1/8,并转换为灰度。
    • IMREAD_IGNORE_ORIENTATION:忽略 EXIF 中的 Orientation 字段

函数原型2

函数原型1的重载函数,仅仅是参数的不同


Mat cv::imdecode	
(InputArray 	buf,int 	flags,Mat * 	dst 
)	

参数2

  • 参数buf 输入数组或字节向量。
  • 参数flags 与 cv::imread 中相同的标志,参见 cv::ImreadModes
  • 参数dst 可选的输出占位符,用于存放解码后的矩阵。当函数反复调用且图像大小相同时,它可以节省图像重新分配的开销。

返回值

解码后的图像。如果解码失败,则返回空的 cv::Mat 对象。

代码示例


#include <fstream>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>int main()
{// 图像文件路径std::string filename = "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg";// 读取图像文件到内存缓冲区std::ifstream file( filename, std::ios::binary );if ( !file.is_open() ){std::cout << "Failed to open file." << std::endl;return -1;}std::vector< unsigned char > buffer( ( std::istreambuf_iterator< char >( file ) ), std::istreambuf_iterator< char >() );file.close();// 使用 cv::imdecode 解码图像数据cv::Mat img = cv::imdecode( buffer, cv::IMREAD_COLOR );if ( img.empty() ){std::cout << "Failed to decode image data." << std::endl;return -1;}// 显示图像cv::imshow( "Decoded Image", img );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • Rustrover2024.2 正式发布:个人非商用免费,泰裤辣
  • idea 创建多模块项目
  • 极狐GitLab 17.4 重点功能解读【三】
  • 第三章 Docker中常用软件安装部署练习
  • win自带录屏怎么用?让视频制作更简单!
  • Spring Cloud全解析:服务调用之多个FeignClient调用服务名称相同
  • 在Pycharm中安装Cv2
  • Page<T>类型数据间的复制
  • Spring-bean实例化的方式
  • LeetCode 每日一题 2024/9/23-2024/9/29
  • 计算机毕业设计 基于Python国潮男装微博评论数据分析系统的设计与实现 Django+Vue 前后端分离 附源码 讲解 文档
  • 基于Node.js+Express+MySQL+VUE新闻网站管理系统的设计与实现
  • React学习笔记(四)——React 组件生命周期
  • 负载均衡(Load Balancing)是一种计算机技术,用于在网络应用中分配工作负载,以优化资源使用、最大化吞吐量、减少响应时间以及避免过载。
  • 【源码+文档+调试讲解】智能校园点餐管理系统springboot
  • 【译】JS基础算法脚本:字符串结尾
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JavaScript 基础知识 - 入门篇(一)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • maven工程打包jar以及java jar命令的classpath使用
  • Mocha测试初探
  • 搞机器学习要哪些技能
  • 基于Android乐音识别(2)
  • 如何使用 JavaScript 解析 URL
  • 数据科学 第 3 章 11 字符串处理
  • 如何在招聘中考核.NET架构师
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • # include “ “ 和 # include < >两者的区别
  • (1)(1.11) SiK Radio v2(一)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (四)opengl函数加载和错误处理
  • (四)进入MySQL 【事务】
  • (算法二)滑动窗口
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)Linq学习笔记
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net Signalr 使用笔记
  • .NET 反射的使用
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net中的Queue和Stack