OpenCV | C++ – 为原始图片添加透明通道,并将图片中的红色区域置为透明并保存
1 为原始图片添加透明通道,并将图片中的红色区域置为透明
先正常读取一张彩色图片,然后为彩色图片添加一个透明通道,然后将彩色图片中是红色的区域置为透明,然后保存为带有透明通道的彩色图片。
示例的C++代码如下
#include <iostream>
#include "opencv2/opencv.hpp"
int main()
{
// 读取图像
cv::Mat image = cv::imread("树莓派.jpg");
// 检查图像是否成功加载
if (image.empty())
{
std::cout << "无法加载图像文件" << std::endl;
return -1;
}
// 创建一个与输入图像大小相同的空白图像,颜色通道为4(包括Alpha通道)
cv::Mat result(image.size(), CV_8UC4);
for (int i = 0; i < image.rows; ++i)
{
for (int j = 0; j < image.cols; ++j)
{
cv::Vec3b pixel = image.at<cv::Vec3b>(i, j);
if (pixel[2] > pixel[0] && pixel[2] > pixel[1]) // 检查红色通道是否最大
{
result.at<cv::Vec4b>(i, j) = cv::Vec4b(0, 0, 0, 0); // 设置透明像素
}
else
{
result.at<cv::Vec4b>(i, j) = cv::Vec4b(pixel[0], pixel[1], pixel[2], 255); // 保留原始像素
}
}
}
// 保存图像为PNG格式,以保留透明度
cv::imwrite("transparent_image.png", result);
return 0;
}
本文以树莓派的图片为示例,因为它的红色区域最多,最后的结果如下图
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:OpenCV | C++ – 为原始图片添加透明通道,并将图片中的红色区域置为透明并保存
原文链接:https://www.stubbornhuang.com/2644/
发布于:2023年06月05日 11:48:25
修改于:2023年06月07日 13:31:09
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52