03_opencv_imwrite()函数

Mat

Mat 类是用于保存图像以及其他矩阵数据的数据结构,默认情况下其尺寸为0

c 复制代码
cv::Mat::Mat(int rows,
			 int cols,
			 int type )		


mat.at<>()函数

c 复制代码
Vec4b&rgba = mat.at<Vec4b>(i, j);

mat.at(i,j),从mat中取出一个像素,像素的类型是Vec4b,该类型含义是,有4个UCHAR类型的元素,

其中rgba[0]、rgba[1]、rgab[2]代表像素的三原色,BGR,即为蓝色(Blue)、Green(绿色)、红色(Red)。

rgba[3]代表像素的的Alpha值,表示像素的透明度。

CV_8UC4 类型

每个像素由 4 个 8 位无符号整数表示

4 通道(通常是 B, G, R, A)→ 带透明度的图像

用于带 alpha 通道的图(如 PNG 透明图),例如:

saturate_cast<>()函数

cv::saturate_cast 是 OpenCV 中用于安全类型转换的核心函数,其核心作用是防止数值溢出。当在不同数据类型(如 uchar、float、short)之间转换时,它会将超出目标类型范围的数值"截断"到合法范围内,避免因溢出导致的图像噪声或计算错误。

imread() 图像的载入

c 复制代码
CV_EXPORTS_W Mat cv::imread	(const String & filename,
							 int flags = IMREAD_COLOR)

(1) 第一个参数,const string& 类型的 filename,填我们需要载入的图片路径名。

(2) 第二个参数,int 类型的 fags,为载入标识,它指定一个加载图像的颜色类型。默认值 1,表示载入三通道的彩色图像。

imshow() 图像的显示

imshowO函数用于在指定的窗口中显示一幅图像

c 复制代码
void cv::imshow	(const String& winname,
				 InputArray  mat)	

(1)第一个参数:const string&类型的 winname,填需要显示的窗口标识名称。

(2)第二个参数:InputAmay 类型的 mat 填需要显示的图像。

imwrite() 输出图像到文件

c 复制代码
CV_EXPORTS_W bool cv::imwrite(const String & filename,
							  InputArray 	img,
							const std::vector< int > & 	params = std::vector< int >())	

(1)第一个参数,const string& 类型的 filename,填需要写入的文件名。注意要带上后缀,如"123.jpg"。

(2)第二个参数,InputArray 类型的 img'一般填一个 Mat 类型的图像数据。

(3)第三个参数,const vector&类型的 params,表示为特定格式保存的参数编码。它有默认值 vector0,所以一般情况下不需要填写。

阿尔法通道

阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度。

Alpha 通道是为保存选择区域而专门设计的通道。在计算机图形学中,一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。

Alpha通道使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色(值为255)的Alpha像素用以定义不透明的彩色像素,而黑色(值为0)的Alpha通道像素用以定义透明像素,介于黑白之间的灰度(值为30-255)的Alpha像素用以定义不同程度的半透明像素。因而通过一个32位总线的图形卡来显示带Alpha通道的图形,就可能呈现出透明或半透明的视觉效果。

demo

在 OpenCV 中生成一幅png图片,并写入到当前工程目录下。

c 复制代码
//---------------------------------【头文件、命名空间包含部分】----------------------------
//        描述:包含程序所使用的头文件和命名空间
//-------------------------------------------------------------------------------------------------
#include <vector>
#include <stdio.h>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;


//--------------------------------【createAlphaMat( )函数】--------------------------------
//        描述:创建带alpha通道的Mat
//-------------------------------------------------------------------------------------------------
void createAlphaMat(Mat &mat)
{
    for(int i = 0; i < mat.rows; ++i) {
        for(int j = 0; j < mat.cols; ++j) {
            Vec4b&rgba = mat.at<Vec4b>(i, j);
            rgba[0]= UCHAR_MAX;  // unsiged char 类型的最大值 255
            rgba[1]= saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) *UCHAR_MAX);
            rgba[2]= saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) *UCHAR_MAX);
            rgba[3]= saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));
        }
    }
}
//-----------------------------------【ShowHelpText( )函数】----------------------------------
//          描述:输出一些帮助信息
//----------------------------------------------------------------------------------------------
void ShowHelpText()
{
    //输出欢迎信息和OpenCV版本
    printf("\n\n\t\t\t   当前使用的OpenCV版本为:" CV_VERSION );
    printf("\n\n  ----------------------------------------------------------------------------\n");
}
int main( )
{
    //创建带alpha通道的Mat
    Mat mat(480, 640, CV_8UC4);
    createAlphaMat(mat);

    ShowHelpText();

    vector<int>compression_params;
    //此句代码的OpenCV2版为:
    //compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
    //此句代码的OpenCV3版为:
    compression_params.push_back(IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);

    //显示图片
    try{
        imwrite("/Volumes/Macintosh HD - 数据/Code/opencv_code/MyFirstOpenCV01/透明Alpha值图.png", mat, compression_params);
        imshow("生成的png图",mat);
        fprintf(stdout,"PNG图片文件的alpha数据保存完毕~\n可以在工程目录下查看由imwrite函数生成的图片\n");
        waitKey(0);
    }
    catch(runtime_error& ex) {
        fprintf(stderr,"图像转换成PNG格式发生错误:%s\n", ex.what());
        return 1;
    }

    return 0;
}
相关推荐
cver1232 分钟前
塑料可回收物检测数据集-10,000 张图片 智能垃圾分类系统 环保回收自动化 智慧城市环卫管理 企业环保合规检测 教育环保宣传 供应链包装优化
人工智能·安全·计算机视觉·目标跟踪·分类·自动化·智慧城市
2501_924880704 小时前
手机拍照识别中模糊场景准确率↑37%:陌讯动态适配算法实战解析
人工智能·深度学习·算法·计算机视觉·智能手机·视觉检测
飞翔的佩奇10 小时前
【完整源码+数据集+部署教程】海上场景水上交通物体检测图像分割系统源码和数据集:改进yolo11-HGNetV2
python·yolo·计算机视觉·毕业设计·数据集·yolo11·水上交通物体检测
大熊背10 小时前
基于人眼视觉特性的相关图像增强基础知识介绍
人工智能·算法·计算机视觉
dlraba80210 小时前
OpenCV 入门实战:从环境配置到图像 / 视频处理
opencv·计算机视觉·音视频
Sunhen_Qiletian17 小时前
计算机视觉前言-----OpenCV库介绍与计算机视觉入门准备
人工智能·opencv·计算机视觉
小王爱学人工智能19 小时前
5分钟了解OpenCV
人工智能·opencv·计算机视觉
格林威20 小时前
工业相机使用 YOLOv8深度学习模型 及 OpenCV 实现目标检测简单介绍
人工智能·深度学习·数码相机·opencv·yolo·目标检测·计算机视觉
qq_5260991321 小时前
VC6800智能相机:赋能智能制造,开启AI视觉新纪元
图像处理·计算机视觉·自动化·相机
XINVRY-FPGA1 天前
XCKU115-2FLVB2104E AMD Xilinx Kintex UltraScale FPGA
嵌入式硬件·计算机视觉·fpga开发·云计算·硬件工程·dsp开发·fpga