2.5BGRA图像保存为PNG格式文件

目录

1.实验原理

2.实验代码

3.运行结果


1.实验原理

函数imwrite用来输出图像到文件

cpp 复制代码
bool imwrite(const string& filename, InputArray image, const vector<int>& params=vector<int>());


参数说明如下:
filename:要保存的文件的名称。
image:要保存的图像。
params:格式特定的保存参数,以参数ID和参数值的配对形式传递,即 paramId_1, paramValue_1, paramId_2, paramValue_2, ...。目前支持的参数如下:
格式特定的保存参数
JPEG
CV_IMWRITE_JPEG_QUALITY:JPEG 图像的质量等级,范围为 0 到 100(数值越高,质量越好)。默认值为 95。
PNG
CV_IMWRITE_PNG_COMPRESSION:PNG 图像的压缩级别,范围为 0 到 9。数值越高意味着更小的文件大小和更长的压缩时间。默认值为 3。
PPM, PGM, 或 PBM
CV_IMWRITE_PXM_BINARY:是否使用二进制格式保存 PPM, PGM, 或 PBM 文件。可以是 0 或 1,其中 1 表示使用二进制格式。默认值为 1。

2.实验代码

//此项目未跑通!!!

cpp 复制代码
#include <iostream>
#include <opencv2\opencv.hpp>
// comment(lib, "opencv_world450d.lib")  //引用引入库 
using namespace cv;
using namespace std;
static void createAlphaMat(Mat &mat)
{
	CV_Assert(mat.channels() == 4);
	for (int i = 0; i < mat.rows; ++i)
	{
		for (int j = 0; j < mat.cols; ++j)
		{
			Vec4b& bgra = mat.at<Vec4b>(i, j);
			bgra[0] = UCHAR_MAX; // Blue
			bgra[1] = saturate_cast<uchar>((float(mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX); // Green
			bgra[2] = saturate_cast<uchar>((float(mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX); // Red
			bgra[3] = saturate_cast<uchar>(0.5 * (bgra[1] + bgra[2])); // Alpha
		}
	}
}
int main()
{
	// Create mat with alpha channel
	//Mat mat(480, 640, CV_8UC4);
	Mat mat = imread("020.png");
	createAlphaMat(mat);
	vector<int> compression_params;
	compression_params.push_back(IMWRITE_PNG_COMPRESSION);
	compression_params.push_back(9);
	bool result = false;
	try
	{
		result = imwrite("alpha.png", mat, compression_params);
	}
	catch (const cv::Exception& ex)
	{
		fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
	}
	if (result)
		printf("Saved PNG file with alpha data.\n");
	else
		printf("ERROR: Can't save PNG file.\n");
	return result ? 0 : 1;
}

下面是一个使用这些参数的例子,展示如何保存一张 JPEG 图像,并设置 JPEG 的质量为 80:

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    cv::Mat image = cv::imread("input.jpg");//牛雪丽

    if (image.empty()) 
    {
        std::cerr << "Could not read the image" << std::endl;
        return -1;
    }

    std::vector<int> params;
    params.push_back(cv::IMWRITE_JPEG_QUALITY);
    params.push_back(80); // 设置 JPEG 质量为 80

    cv::imwrite("output.jpg", image, params);

    return 0;
}

3.运行结果

相关推荐
howard20056 小时前
1.2 图像处理基本操作
opencv·读取图像·显示图像·保存图像
jndingxin13 小时前
OpenCV视觉分析之目标跟踪(12)找到局部的最大值函数meanShift()的使用
人工智能·opencv·目标跟踪
9分钟带帽18 小时前
opencv_相关的问题
人工智能·opencv·计算机视觉
jndingxin20 小时前
OpenCV相机标定与3D重建(2)鱼眼相机模型
数码相机·opencv·3d
zhanghongyi_cpp1 天前
图像分割1
python·opencv·计算机视觉
jndingxin1 天前
OpenCV视觉分析之目标跟踪(10)估计两个点集之间的刚性变换函数estimateRigidTransform的使用
人工智能·opencv·目标跟踪
Jason_zhao_MR1 天前
基于OpenCV的相机捕捉视频进行人脸检测--米尔NXP i.MX93开发板
人工智能·嵌入式硬件·mcu·数码相机·opencv·音视频
凤枭香1 天前
Python OpenCV形态学处理和图像梯度
python·opencv·计算机视觉
背拥1 天前
易盾增强版滑块识别/易盾识别/滑块识别/增强版滑块识别/易盾滑块本地识别
人工智能·opencv·计算机视觉
努力学习的啊张1 天前
ChatGPT 新体验:AI 搜索功能与订阅支付指南
java·人工智能·gpt·opencv·ai·chatgpt·eclipse