Linux37:利用OPENCV 的imread读取图片信息和imwrite写入数据

目录

1.imread的定义

2.imread读取图片并输出图片属性

2.1.imread读取三通道的彩色图像

2.2.imread读取单通道的灰度图像

3.imwrite的定义

4.代码实现imwrite保存图片


1.imread的定义

在OPENCV中常用imread去读取图片信息,下面我们来看看imread的定义.

Mat imread( const String& filename, int flags = IMREAD_COLOR );

第一个参数:filename图片的名称,名称可以是绝对路径也可以是相对路径

第二个参数:flags标识符,flags标识符默认为IMREAD_COLOR。

返回值:Mat矩阵

flags一般分为三种:

  • IMREAD_UNCHANGED(<O)按原样加载图像(包括alpha通道(如果存在)
  • IMREAD_GRAYSCALE(0)将图像作为强度加载
  • IMREAD_COLOR(>0)以RGB格式加载图像

2.imread读取图片并输出图片属性

2.1.imread读取三通道的彩色图像

本章节主要是讲解如何通过代码去实现OPENCV读取图片,并且输出它的图片信息,下面是具体的代码实现:

Mat img_mat = imread("frame1.jpg");

printf("width = %d, height = %d, channels = %d \n", img_ mat.cols, img_ mat.rows, img_mat.channels());

输出结果:width =1920, height =1080, channels =3

2.2.imread读取单通道的灰度图像

Mat img_mat_gray = imread("gray_framel.jpg", IMREAD_GRAYSCALE);

printf( "img_mat_gray_width = %d, img_mat_gray_height = %d, img_mat_gray_channels = %dln", iimg_mat_gray_.cols,img_mat_gray.rows, img_mat_gray.channels());

输出的结果: img_mat_gray_width = 1920, img_ mat_gray_height = 1080, img_mat_gray_chahnels = 1

3.imwrite的定义

在OPENCv中常用 imwrite 去保存图片,下面我们来看看imwrite的定义.

bool imwrite(const Strings filename, InputArray image, const std::vector<int>& params);

第一个传参:filenamme表示要保存的文件名

第二个传参:image表示需要保存的图像数据

第三个传参:paramns保存图像可选参数,主要是设置图像的质量,设置规则具体的我们来看看,该参数需要按照参数id+参数值成对出现,可以出现多对参数值(比如(paramId_1,paramValue_1,paramId_2,paramValue_2,...)),但必须保证这些参数对是相关的,比如保存JPG图像时,只能使用和JPEG相关的参数ID进行组合使用。

paramns的ID基本上是cv::ImwriteFlags.下面我们来看看ImwriteFlags的定义:

  • cv::IMWRITE_JPEG_QUALITY:设置JPEG图像的质量,范围为0到100,数值越高质量越好,但文件大小也会相应增加。
  • CV::IMWRITE_PNG_COMPRESSION:设置PNG图像的压缩级别,范围为0(无压缩)到9(最大压缩),数值越小压缩率越高,但文件大小也会相应增加。
  • CV::IMWRITE_PXM_BINARY:将PXM图像保存为二进制格式,不进行任何压缩。

4.代码实现imwrite保存图片

4.1.使用默认的方式imwrite保存图片

Mat mat = Mat(300,300,CV_8UC3,Scalar(218,112,214));

imwrite("mat_demo.jpg",mat);

上面是使用默认的方法保存图片,这种方法的所有参数都是默认选项。

4.2.使用 params 的方式 imwrite 保存图片

Mat quality_framel_mat = imread("framel.jpg");

std::vector<int> params = {cv::IMWRITE_JPEG_QUALITY, 40};

imwrite("quality_mat_demo.jpg", quality_frame1_mat, params);

这种方法使用的是params参数的方式去设置,上面我们设置了图像的质量在40,大家如果想设置其他功能可以参考上面的枚举进行设置。经过编码质量40的处理后的图像大小小于原图像大小,这说明编码质量关乎着文件的大小和画面的质量

cs 复制代码
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv; //Must Need Write cv
using namespace std;

int main()
{
    Mat mat = Mat(300,300,CV_8UC3,Scalar(218,112,214));
    imwrite("file1.jpg",mat);

    Mat quality_mat = Mat(300,300,CV_8UC1);
    vector<int> params = {cv::IMWRITE_JPEG_QUALITY,40};
    imwrite("file2.jpg",quality_mat,params);

    Mat img_mat = imread("file1.jpg");
    printf("img_mat.width = %d,img_mat.hight = %d,img_mat.chnale = %d\n",img_mat.cols,img_mat.rows,img_mat.channels());

    Mat img_gray_mat = imread("file2.jpg",IMREAD_GRAYSCALE);
    printf("img_gray_mat.width = %d,img_gray_mat.height = %d,img_gray_amt.channel = %d\n",img_gray_mat.cols,img_gray_mat.rows,img_gray_mat.channels());


    return 0;
}
相关推荐
2501_920953862 小时前
工业4.0时代,制造企业精益管理咨询的标准化实施步骤
大数据·人工智能·制造
~央千澈~2 小时前
《2026鸿蒙NEXT纯血开发与AI辅助》第四章 对鸿蒙next项目结构目录详解以及实战解决一个最初的依赖安装的报错·卓伊凡
人工智能
xinlianyq2 小时前
2026企业流量破局:四大主流短视频矩阵获客系统深度解析与选型指南
人工智能·矩阵
workflower3 小时前
用硬件换时间”与“用算法降成本”之间的博弈
人工智能·算法·安全·集成测试·无人机·ai编程
Cx330❀4 小时前
一文吃透Linux System V共享内存:原理+实操+避坑指南
大数据·linux·运维·服务器·人工智能
OPHKVPS4 小时前
Anthropic 为 Claude Code 推出“自动模式”:AI 编码工具迈向更高自主性
网络·人工智能·安全·ai
Allen_LVyingbo4 小时前
斯坦福HAI官网完整版《2025 AI Index Report》全面解读
人工智能·数学建模·开源·云计算·知识图谱
金融小师妹4 小时前
基于AI通胀预期建模与能源冲击传导机制的政策分析:高频信号下的风险再评估
人工智能·svn·能源
胡摩西4 小时前
当大模型遇上毫米级定位:机器人将拥有“空间思维”?
人工智能·机器人·slam·gps·室内定位·roomaps
志栋智能4 小时前
超自动化运维的终极目标:让系统自治运行
运维·网络·人工智能·安全·自动化