unity抠人像原理_OpenCV For Unity 实现简单抠图
Opencv的抠图的思路非常简单,就是对一个像素点进行判断,如果是需要剔除的像素,就把该像素的A通道改为0,即变为透明了。
今天就来实现下面这个效果把一个白色的透明通道,抠除的效果。
同样,要对图像操作,首先需要对图片进行读取,这是非常基本的了。而今天要获取图像上的一个像素点,那么就需要用到OpenCVForUnity这个插件中的获取像素点的方法。int[] get()
他是Mat容器上的实例方法他会返回一个Int数组,如果是JPG,这个数组的长度就是3,分别代表RGB值,如果是PNG,这个数组长度就是RGBA值。
首先我们获取图片的Mat,并把尺寸改小增加运行效率。
因为Logo是JPG,所以我们要把这个JPG装进一个四通道的容器里去。
而且我们知道图片中白色的RBA 是(255,255,255),而黑色的RBA是(0,0,0)
而我们只要判断这个像素点是不是等于255就能判断他是不是白色拉。而Mat.Put则是修改图片像素的方法,前面是图片的坐标点,后面跟着RGBA值,并保持原来的值,并把透明通道的值改为0;
但运行结果会发现锯齿很严重,抠不干净。
而我们也知道图片的像素其实是做了插值运算的,所以越是邻近黑色的像素点,并不等于255的。所以我们把他设置一个阈值。
你会发现比刚才干净很多。
但复杂抠图可比简单抠图要难很多,逻辑也要复杂很多,所以这里只是提供一个思路给大家,如何去改变一个像素值,获取一个像素值,你可以自己不断进行新的尝试。
下面是完整代码
void Start()
{
//把图片读进三通道的容器
var src = Imgcodecs.imread(Application.streamingAssetsPath + "/logo.jpg", 1);
// var mask = Imgcodecs.imread(Application.streamingAssetsPath+"/testsf.jpg",0);
//把尺寸设置为大小
Imgproc.resize(src, src, new Size(500, 500));
//建立一个四通道的容器
var dst = new Mat(src.cols(), src.rows(), CvType.CV_8UC4);
//转换色彩空间
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2RGBA);
for (int i = 0; i < dst.cols(); i++)
{
for (int j = 0; j < dst.rows(); j++)
{
//这个105是阈值,你可以自己定义来试试效果
if (dst.get(j, i)[0] >105)
{
dst.put(j, i, 255, 255, 255, 0);
}
}
}
var tex = new Texture2D(dst.cols(), dst.rows(), TextureFormat.RGBA32, false);
Utils.matToTexture2D(dst, tex);
var raw = this.GetComponentInChildren();
raw.texture = tex;
raw.SetNativeSize();
}
unity抠人像原理_OpenCV For Unity 实现简单抠图相关推荐
- unity抠人像原理_【图】自动抠图抠人像的方法 智能化的人像识别抠图好用到爆...
以前,想要把照片中的人像抠出来,可能需要打开ps(不过前提是你电脑有安装PS,如果没有安装PS还要花时间下载安装),然后在一点点的手动完成抠图,虽然PS抠图工具多,整体也不算也难,但是过程繁琐而且抠出 ...
- unity抠人像原理_抠出精细发丝人像图片的PS抠图教程
素材图片是在阳光下拍摄,同时人物的头发被风吹散了,飘起的很多乱发,在阳光的照射下,乱发都变成了金色的效果:抠图的时候可以选择最简单的通道,快速抠出发丝.推荐给朋友学习,希望大家可以喜欢. 最终效果 原 ...
- unity抠人像原理_使用face++ 实现人像抠图
face++人像抠图接口地址 参数说明: 是否必选 参数名 类型 参数说明 必选 api_key string 调用此 API 的 API Key 必选 api_secret string 调用此 A ...
- unity抠人像原理_c# 利用百度图像处理【人像分割】一键抠图
百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg 注意本文后面的话,百度这个技术效果太差劲了,国外这 https://www.remove.bg/ 个比 ...
- unity抠人像原理_PS 抠人像如何抠得干净?
首先:介绍4种方法扣此图 一.魔术棒工具--适用于主体物和背景颜色区分明显的图片,简单快速.对于我们本次选的图像先做粗略抠图 1.魔术棒工具将人物选中(按住SHIFT增加选区,按住AIT减少选区),之 ...
- unity抠人像原理_抠取复杂背景下人像头发丝的PS方法
素材图片的背景非常明亮,同时明暗差距较大,局部背景颜色接近白色,发丝与背景很难分别:左侧部分光斑较多,环境较为复杂,需要综合通道,钢笔,调色工具等来分离发丝. 原图及最终效果 1.先来分析发丝.打开上 ...
- unity图像压缩算法原理
概述 在计算机图形学中,存在许多纹理压缩方案.压缩既减少了纹理内存占用,又降低了使用纹理的带宽要求.本文中,"纹理压缩"与"图像压缩"不同,因为纹理压缩方案的设 ...
- Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)
Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要 写在前面 实验场景 实验1:红(不透明)+蓝(不透明)+默认渲染顺序(先渲染蓝Cube) 实验2:红(不透明+优先渲染)+蓝( ...
- Unity DOTS从原理到应用
什么是DOTS? Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性.它使用C# Job Syst ...
最新文章
- Redis 命令整理
- NHibernate.ADOException: cannot open connection
- Luogu P2580 于是他错误的点名开始了 Trie树 字典树
- X509Certificate2 本地正常,放到线上内部错误
- Python列表:list
- oracle修改字段的默认,oracle系统默认的账号ORACLE修改表字段的数据类型
- c# forbidden.html,c# - google+ api error forbidden 403 - Stack Overflow
- 比_thread高级的threading模块,对比释放锁例子
- 2015.12.21 内存管理(memory management)
- python人工智能小程序_推荐几款“真”人工智能技术小程序
- stm32固件库手册使用方法
- 微信小程序的转发分享功能
- C:L1-061 新胖子公式 (10分)
- [渝粤教育] 中国地质大学 Java语言程序设计 复习题
- MATLB|基于粒子群算法的能源管理系统EMS(考虑光伏、储能 、柴油机系统)
- AAAI 2020 | 清华大学牛人为BabelNet同义词集预测Sememe建立多语言知识库
- 蓝桥杯STM32G431——RTC实时时钟
- 065:ORM查询条件详解-gt、gte、lt和lte
- 平面坐标系旋转和平移
- 数据库 Mysql 终端代码
热门文章
- 圈地运动-组成面积大于0多边形
- 易周金融 | Q1手机银行活跃用户规模6.5亿;理财子公司布局新兴领域
- SpringBoot35-分布式系统开发-spring cloud1
- MATLAB(十)方程式求根
- 前端登录页做个简单记住密码
- android的timertask,Android 中 Timer 和 TimerTask的使用
- java中实现代理及委托代理模式
- [诗歌] 李白《怨情》
- Obsidian + remotely save + 坚果云:实现电脑端和手机端的同步
- Mybatis使用注解的方式执行存储过程并获取返回值