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

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

儿童乐园软件下载安装 佳易王游乐场会员扣次管理系统操作教程

一、前言 儿童乐园软件下载安装 佳易王游乐场会员扣次管理系统操作教程 软件为绿色免安装版&#xff0c;已经内置数据库&#xff0c;不需再安装数据库文件&#xff0c;软件解压即可。 二、软件程序教程 1、软件可同时管理多个项目&#xff0c;项目设置方法如图&#xff0c;点…

一般的网页结构是什么样的?

网页源码结构概述 一个典型的网页源码结构通常包含以下几个主要部分&#xff1a; ‌DOCTYPE 声明‌ 位于HTML文档的最前面&#xff0c;用于告诉浏览器文档使用哪个HTML版本进行解析。例如&#xff1a;<!DOCTYPE html>。 ‌html 元素‌ 这是整个HTML文档的根元素&#xf…

mariadb无法存储中文

如果 MariaDB 无法存储中文&#xff0c;可能有以下几个原因及解决方法&#xff1a; 一、字符集设置问题 1.检查数据库字符集&#xff1a; 使用以下 SQL 语句查看当前数据库的字符集设置&#xff1a; SHOW VARIABLES LIKE character_set_database;SHOW VARIABLES LIKE collat…

基于微信小程序爱心领养小程序设计与实现(源码+参考文档+定制开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

grafana频繁DataSourceError问题

背景 随着 Grafana 数据量的不断增加&#xff0c;逐渐暴露出以下问题&#xff1a; Grafana 页面加载缓慢&#xff1b;Grafana 告警频繁出现 DatasourceError 错误。 对于第一个问题&#xff0c;大家可以参考这篇文章&#xff1a;Grafana 加载缓慢的解决方案。 不过&#xf…

828华为云征文|华为云Flexus X实例Windows Server 2019安装护卫神防火墙——为企业运维安全发挥重要作用!!!

前言 公司最近需要选购一台华为云Windows服务器部署产品应用&#xff0c;但是考虑到Windows的安全性至关重要。护卫神防火墙无疑是守护Windows系统安全的得力助手。 华为云以其强大的性能和稳定的服务&#xff0c;为众多企业和开发者提供了可靠的云端基础设施。在网络环境日益复…

【Python报错已解决】 TypeError: ‘ellipsis‘ object is not subscriptable

引言&#xff1a; 在Python开发过程中&#xff0c;遇到报错是家常便饭。而每一种报错都像是一个谜题&#xff0c;等待着开发者去解开。今天我们就来探讨一个特定的Python报错&#xff1a;TypeError: ‘ellipsis‘ object is not subscriptable。这个报错可能会让很多开发者感到…

【高效办公】商汤办公小浣熊微信小程序:随时随地搞定数据分析

在这个数据驱动的时代&#xff0c;无论是职场新人还是经验丰富的专业人士&#xff0c;都需要处理大量的数据和报表。为了提高工作效率&#xff0c;各种智能化工具层出不穷。今天要向大家推荐一款由商汤科技研发的高效数据分析工具——“办公小浣熊”&#xff01; 一、办公小浣…

vue2.0如何获取地址栏地址

在Vue 2.0中&#xff0c;你可以使用this.$route对象来获取当前的路由信息&#xff0c;包括地址栏地址。你需要确保你的项目中已经安装并配置了vue-router。 以下是一个简单的例子&#xff0c;展示如何在Vue组件中获取并打印当前的地址栏地址&#xff1a; <template><…

C++与Live555实现RTSP服务器

一、引言&#xff08;Introduction&#xff09; 1.1 RTSP服务器的重要性&#xff08;Importance of RTSP Server&#xff09; RTSP&#xff08;Real Time Streaming Protocol&#xff0c;实时流传输协议&#xff09;服务器在现代网络传输中扮演着至关重要的角色。RTSP服务器主…

【实战篇】怎么最快地复制一张表?

背景 怎么在两张表中拷贝数据&#xff1f;如果可以控制对源表的扫描行数和加锁范围很小的话&#xff0c;我们简单地使用 insert … select 语句即可实现。 当然&#xff0c;为了避免对源表加读锁&#xff0c;更稳妥的方案是先将数据写到外部文本文件&#xff0c;然后再写回目…

【chrome 插件】初窥

目录结构 -----manifest.json #配置文件 |----content.js #对应操纵浏览器页面 |----background.js #一直运行在后台&#xff0c;负责持久化数据, 负责与服务器交互数据 |----popup.js #自动配置到 popup.html, 有权限操纵 popup.html |----popup.html #插件页面其中 popup.j…

unity 介绍Visual Scripting Scene Variables

Visual Scripting中的场景变量是指在Unity中使用可视化脚本时&#xff0c;能够在不同场景间传递和存储数据的变量。这些变量可以用来跟踪游戏状态、玩家信息或其他动态数据&#xff0c;允许开发者在不编写代码的情况下创建复杂的游戏逻辑。 场景变量的优势包括&#xff1a; 1…

JavaScript 中的 === 运算符

是JavaScript中的严格相等运算符。它用于比较两个值是否完全相等,不仅比较值,还比较类型。这与 (相等运算符)不同,后者在比较之前会进行类型转换。 示例 1. 比较相同类型的值 console.log(5 5); // true console.log(hello hello); // true console.log(true true); …

物理加密机的高性能操作

物理加密机&#xff0c;也被称为硬件安全模块(HSM)或加密锁&#xff0c;是一种用于保护敏感数据和软件应用的物理设备。以下是关于物理加密机的详细介绍&#xff1a; 一、定义与功能 物理加密机通过提供强大的加密功能和访问控制&#xff0c;确保数据在存储、处理和传输过程中的…

WeChat_DevTools 断点调试方法总结

新建工程&#xff0c;以小程序 login 调试为例&#xff0c;代码如下&#xff1a; // 登录wx.login({success: res > {// 发送 res.code 到后台换取 openId, sessionKey, unionIddebugger;resThis this;wx.showModal({title: 登录成功,content: res.code res.code,comple…

C++学习笔记(48)

341、基于 Linux 的文件操作 一、demo3.cpp // demo3.cpp&#xff0c;本程序演示了 Linux 底层文件的操作-创建文件并写入数据。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> using na…

语雀笔记使用记录

初识语雀 语雀官网 语雀帮助 教你如何使用语雀提高效率 语雀极简使用指南 | 10个常用技巧&#xff0c;带你快速入门 语雀安装 语雀下载地址 根据自己的pc平台下载对应的版本&#xff0c;然后傻瓜式安装即可 初试语雀 语雀为云笔记&#xff0c;并且其特性比较符合我个人的需求…

Linux网络:网络编程套接字

socket 套接字 socket常见API 创建套接字&#xff1a;&#xff08;TCP/UDP&#xff0c;客户端服务器&#xff09; int socket(int domain, int type, int protocol);绑定端口号&#xff1a;&#xff08;TCP/UDP&#xff0c;服务器&#xff09; int listen(int sockfd, int …

搭建服务器并安装MySQL数据库(记录实现流程)

前言 在搭建服务器并安装 MySQL 数据库的路上&#xff0c;总会遇到不少的磕磕碰碰。本文记录这个实现的流程&#xff0c;作为对自己工作的总结&#xff0c;同时也希望能将自己的绵薄经验分享到有需要的朋友。本文采用的是 Ubuntu 22.04 桌面版。因为 Ubuntu 24 笔者探索过一段…