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.运行结果

相关推荐
小草cys6 小时前
树莓派4 yolo 11l.pt性能优化后的版本
opencv·计算机视觉·目标跟踪
Blossom.11810 小时前
探索边缘计算:赋能物联网的未来
开发语言·人工智能·深度学习·opencv·物联网·机器学习·边缘计算
(ღ星辰ღ)12 小时前
js应用opencv
开发语言·javascript·opencv
多巴胺与内啡肽.1 天前
Opencv进阶操作:图像拼接
人工智能·opencv·计算机视觉
白熊1881 天前
【计算机视觉】OpenCV实战项目:ETcTI_smart_parking智能停车系统深度解析
人工智能·opencv·计算机视觉
HockerF1 天前
交叉编译 opencv-4.10
人工智能·opencv·计算机视觉
新知图书1 天前
使用OpenCV的VideoCapture播放视频文件示例
opencv·视频
鸿蒙布道师1 天前
英伟达开源Llama-Nemotron系列模型:14万H100小时训练细节全解析
深度学习·神经网络·opencv·机器学习·自然语言处理·数据挖掘·llama
知舟不叙1 天前
基于OpenCV的人脸识别:LBPH算法
人工智能·opencv·人脸检测·lbph算法
白熊1881 天前
【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析
人工智能·opencv·计算机视觉