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 实现简单抠图相关推荐

  1. unity抠人像原理_【图】自动抠图抠人像的方法 智能化的人像识别抠图好用到爆...

    以前,想要把照片中的人像抠出来,可能需要打开ps(不过前提是你电脑有安装PS,如果没有安装PS还要花时间下载安装),然后在一点点的手动完成抠图,虽然PS抠图工具多,整体也不算也难,但是过程繁琐而且抠出 ...

  2. unity抠人像原理_抠出精细发丝人像图片的PS抠图教程

    素材图片是在阳光下拍摄,同时人物的头发被风吹散了,飘起的很多乱发,在阳光的照射下,乱发都变成了金色的效果:抠图的时候可以选择最简单的通道,快速抠出发丝.推荐给朋友学习,希望大家可以喜欢. 最终效果 原 ...

  3. unity抠人像原理_使用face++ 实现人像抠图

    face++人像抠图接口地址 参数说明: 是否必选 参数名 类型 参数说明 必选 api_key string 调用此 API 的 API Key 必选 api_secret string 调用此 A ...

  4. unity抠人像原理_c# 利用百度图像处理【人像分割】一键抠图

    百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg 注意本文后面的话,百度这个技术效果太差劲了,国外这 https://www.remove.bg/ 个比 ...

  5. unity抠人像原理_PS 抠人像如何抠得干净?

    首先:介绍4种方法扣此图 一.魔术棒工具--适用于主体物和背景颜色区分明显的图片,简单快速.对于我们本次选的图像先做粗略抠图 1.魔术棒工具将人物选中(按住SHIFT增加选区,按住AIT减少选区),之 ...

  6. unity抠人像原理_抠取复杂背景下人像头发丝的PS方法

    素材图片的背景非常明亮,同时明暗差距较大,局部背景颜色接近白色,发丝与背景很难分别:左侧部分光斑较多,环境较为复杂,需要综合通道,钢笔,调色工具等来分离发丝. 原图及最终效果 1.先来分析发丝.打开上 ...

  7. unity图像压缩算法原理

    概述 在计算机图形学中,存在许多纹理压缩方案.压缩既减少了纹理内存占用,又降低了使用纹理的带宽要求.本文中,"纹理压缩"与"图像压缩"不同,因为纹理压缩方案的设 ...

  8. Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)

    Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要 写在前面 实验场景 实验1:红(不透明)+蓝(不透明)+默认渲染顺序(先渲染蓝Cube) 实验2:红(不透明+优先渲染)+蓝( ...

  9. Unity DOTS从原理到应用

    什么是DOTS? Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性.它使用C# Job Syst ...

最新文章

  1. Redis 命令整理
  2. NHibernate.ADOException: cannot open connection
  3. Luogu P2580 于是他错误的点名开始了 Trie树 字典树
  4. X509Certificate2 本地正常,放到线上内部错误
  5. Python列表:list
  6. oracle修改字段的默认,oracle系统默认的账号ORACLE修改表字段的数据类型
  7. c# forbidden.html,c# - google+ api error forbidden 403 - Stack Overflow
  8. 比_thread高级的threading模块,对比释放锁例子
  9. 2015.12.21 内存管理(memory management)
  10. python人工智能小程序_推荐几款“真”人工智能技术小程序
  11. stm32固件库手册使用方法
  12. 微信小程序的转发分享功能
  13. C:L1-061 新胖子公式 (10分)
  14. [渝粤教育] 中国地质大学 Java语言程序设计 复习题
  15. MATLB|基于粒子群算法的能源管理系统EMS(考虑光伏、储能 、柴油机系统)
  16. AAAI 2020 | 清华大学牛人为BabelNet同义词集预测Sememe建立多语言知识库
  17. 蓝桥杯STM32G431——RTC实时时钟
  18. 065:ORM查询条件详解-gt、gte、lt和lte
  19. 平面坐标系旋转和平移
  20. 数据库 Mysql 终端代码

热门文章

  1. 圈地运动-组成面积大于0多边形
  2. 易周金融 | Q1手机银行活跃用户规模6.5亿;理财子公司布局新兴领域
  3. SpringBoot35-分布式系统开发-spring cloud1
  4. MATLAB(十)方程式求根
  5. 前端登录页做个简单记住密码
  6. android的timertask,Android 中 Timer 和 TimerTask的使用
  7. java中实现代理及委托代理模式
  8. [诗歌] 李白《怨情》
  9. Obsidian + remotely save + 坚果云:实现电脑端和手机端的同步
  10. Mybatis使用注解的方式执行存储过程并获取返回值