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

news/2024/9/29 19:21:27/
  • 操作系统: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;
}

运行结果

在这里插入图片描述


http://www.ppmy.cn/news/1532056.html

相关文章

更新 Git 软件

更新 Git 软件本身是指将你当前安装的 Git 版本升级到最新版本。不同的操作系统有不同的更新方法。以下是针对 Windows、macOS 和 Linux 的 Git 更新步骤&#xff1a; Windows 检查当前版本&#xff1a; git --version访问官网下载最新版本&#xff1a; 访问 Git 官方网站 (ht…

软件设计模式概述

概述 软件设计内容 软件体系结构 — 宏观设计,模块软件设计模式 — 中间级别,类,接口,模块数据结构与算法 — 微观设计,方法 是什么 设计经验的总结 七个常用原则 单一职责原则 就一个类而言,应该仅有一个引起他变化的原因 为什么 当一个类职责过多,一个职责的变化可能…

在Ubuntu22.04上部署自签名SSL证书

自签名证书签发相对于商业证书流程简单&#xff0c;费用低廉&#xff0c;更新容易。所以在开发领域、甚至一些小众场景下特别常见&#xff0c;比如公司的内网服务、网站安全证书、企业路由器设备的管理后台、用于管理企业员工的“安全准入客户端”等不乏使用这个方案。 接下来…

Pencils Protocol 成市场新宠,生态通证$DAPP价值几何

Pencils Protocol 是 Scroll 生态综合性收益平台&#xff0c;其仅在 Scroll 生态单链 TVL 就已经突破了 3.5 亿美元&#xff0c;同时在上线短短几个月的时间里就积累了超 50 万活跃社区用户。现阶段 Pencils Protocol 已经完成了 DAPP 通证的 TGE &#xff0c;分别在 Tokensoft…

流水标准化处理器

作品描述 传统方式处理银行流水时&#xff0c;由于不同的银行&#xff0c;流水格式不尽相同&#xff0c;需要针对不同银行构建不同的处理器&#xff08;Handler&#xff09;分别处理&#xff0c;导致系统耦合性高且可拓展性低。 流水标准化处理器则采用配置的方式&#xff0c…

Java零工市场小程序如何改变自由职业者生活

如今&#xff0c;自由职业者越来越多&#xff0c;他们需要找到合适的工作机会&#xff0c;Java零工市场小程序&#xff0c;为自由职业者提供了一个方便、快捷的寻找工作机会的方式&#xff0c;这样一来&#xff0c;改变了自由职业者找寻工作的方式&#xff0c;也提高了他们的收…

MySQL 临时表

MySQL 临时表 引言 在数据库管理中&#xff0c;临时表是一种非常有用的工具&#xff0c;尤其是在进行复杂的数据处理和查询时。MySQL 作为一种流行的关系型数据库管理系统&#xff0c;提供了对临时表的支持。本文将详细介绍 MySQL 临时表的概念、用途、创建方法以及管理技巧。…

Python 学习之生成图形验证码

一、 如何生成图形验证码&#xff1f; 新建一个captcha 的python 文件包&#xff0c;在__init__.py 文件中写入生成图形验证码的代码&#xff0c;将字体文件也放入这个文件包中 。 import random from PIL import Image, ImageDraw, ImageFont, ImageFilter import stringcla…