png,jpg图片透明度化demo

简介: png,jpg图片透明度化demo

使用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界面中,就可以看到背景颜色变化了。

目录
相关文章
|
Shell 开发工具 git
Windows小技巧 -- 目录内打开CMD的快捷方式
Windows小技巧 -- 目录内打开CMD的快捷方式
1153 2
|
存储 负载均衡 安全
Java并发基础:ArrayBlockingQueue全面解析!
ArrayBlockingQueue类是一个高效、线程安全的队列实现,它基于数组,提供了快速的元素访问,并支持多线程间的同步操作,作为有界队列,它能有效防止内存溢出,并通过阻塞机制平衡生产者和消费者的速度差异,它还提供了公平性和非公平性策略,满足不同场景下的需求。
250 1
Java并发基础:ArrayBlockingQueue全面解析!
|
消息中间件 NoSQL 算法
Redis延时队列,这次彻底给你整明白了
所谓延时队列就是延时的消息队列,下面说一下一些业务场景实践场景订单支付失败,每隔一段时间提醒用户用户并发量的情况,可以延时2分钟给用户发短信先来看看Redis实现普通的消息队列我们知道,对于专业的消息队列中间件,如Kafka和RabbitMQ,消费者在消费消息之前要进行一系列的繁琐过程。如RabbitMQ发消息之前要创建 Exchange,再创建 Queue,还要将 Queue 和 Exchange 通过某种规则绑定起来,发消息的时候要指定 routingkey,还要控制头部信息但是绝大 多数情况下,虽然我们的消息队列只有一组消费者,但还是需要经历上面一些过程。有了 Redis,对于那些只
4529 0
|
前端开发
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
Vue3 element-ui el-upload(上传组件) 上传图片后,隐藏上传按钮
900 0
|
关系型数据库 MySQL Linux
centos7安装mysql5.6
centos7安装mysql5.6
|
10月前
|
负载均衡 监控 Dubbo
Dubbo 实现原理详解,一文吃透!
本文深入解析Dubbo的底层实现原理,涵盖远程方法调用、智能容错和负载均衡、服务注册和发现三大核心功能,详解其架构设计和调用流程。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Dubbo 实现原理详解,一文吃透!
|
5月前
|
前端开发 JavaScript 定位技术
《从Web到原生:Cordova框架如何搭建功能互通的桥梁》
Cordova是一个开源移动开发框架,通过WebView组件运行HTML、CSS和JavaScript编写的Web应用,并借助插件机制实现与设备原生功能的交互。开发者可轻松调用相机、地理位置等原生功能,无需深入原生代码细节。Cordova拥有丰富的官方及第三方插件生态,支持从硬件访问到网络通信等多种功能,助力快速开发跨平台应用。然而,在使用过程中需关注插件兼容性、性能优化及数据安全等问题。Cordova打破了Web与原生间的壁垒,让开发者用熟悉的技术构建功能丰富、体验流畅的应用。
167 17
|
8月前
|
SQL 人工智能 关系型数据库
PolarDB-PG AI最佳实践 2 :PolarDB AI X EAS实现自定义库内模型推理最佳实践
PolarDB通过POLAR_AI插件支持使用SQL调用AI/ML模型,无需专业AI知识或额外部署环境。结合阿里云EAS在线模型服务,可轻松部署自定义模型,在SQL中实现如文本翻译等功能。
|
10月前
|
Kubernetes Cloud Native 调度
云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性
Argo Workflows是CNCF毕业项目,最受欢迎的云原生工作流引擎,专为Kubernetes上编排批量任务而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。
|
Web App开发 XML 存储
一篇文章讲明白JPG、PNG、GIF、SVG等格式图片区别
一篇文章讲明白JPG、PNG、GIF、SVG等格式图片区别