使用opencv对各种图片进行透明度化操作
1.如何配置opencv,相信大家已经会了,那直接跳到第2步,我给不会的同学们讲讲
1,下载opencv官方库文件,https://docs.opencv.org/
我这里下载的是4.5.5版本。
2,在你们的程序中配置opencv,右键项目-属性
找到c++ --常规–附加包含目录,添加如下:D:\opencv4.5.5\opencv\build\include
D:\opencv4.5.5\opencv\build\include\opencv2
找到链接器–常规–附加库目录 添加如下:D:\opencv4.5.5\opencv\build\x64\vc15\lib
最后一步,在链接器–输入-附加以来项添加opencv_world455d.lib(根据你opencv版本不同有所改动)
验证一下,项目中添加头文件#include<opencv2/opencv.hpp>如果不报错,就代表添加成功了
2.那正式对图片透明度进行操作,狠人话不多,直接上代码加注释
#include<opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 命名空间声明
using namespace cv;
std::cout << "Hello World!\n";
// 读取原始图片
cv::Mat src = cv::imread(".\\img\\删除.png", cv::IMREAD_UNCHANGED);
// 创建用于保存结果的图像矩阵
cv::Mat result;
// 将原始图像转换为带有透明通道的图像(BGRA格式)
cvtColor(src, result, cv::COLOR_BGR2BGRA);
// 遍历图像像素,根据阈值设置透明度
for (int i = 0; i < src.rows; i++)
{
for (int j = 0; j < src.cols; j++)
{
// 获取原始图像和结果图像的指针
uchar* pSrc = src.ptr<uchar>(i, j);
uchar* pResult = result.ptr<uchar>(i, j);
// 设置默认不透明度为255
pResult[3] = 255;
// 如果原始图像的RGB通道值均大于200,则认为是背景
// 将对应结果图像的透明度设为0,即完全透明
if (pSrc[0] > 200 && pSrc[1] > 200 && pSrc[2] > 200)
{
pResult[3] = 0;
}
/* 如果希望设置其他颜色为透明,可以使用类似的逻辑
if (pSrc[0] > 20 || pSrc[1] > 20 || pSrc[2] > 20)
{
pResult[3] = 255;
}
*/
}
}
// 将处理后的图像保存为结果图像
cv::imwrite("result.png", result);
return 0;
}
注释解释的很清楚,上点图片看看效果如何。
经过透明度化后的图片,在贴到ui界面中,就可以看到背景颜色变化了。