一、参考:
1、OpenCV For Unity 实现简单抠图
https://www.jianshu.com/p/3f1876c62b11
①总结:good:很好用,使用起来很是方便,下面是我进行代码修改后的内容,并且能够直接运行起来
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using UnityEngine.Events;
using UnityEngine.Serialization;
using OpenCVForUnity.CoreModule;
using OpenCVForUnity.UnityUtils;
using OpenCVForUnity.ImgprocModule;
using OpenCVForUnity.UnityUtils.Helper;
using OpenCVForUnity.ImgcodecsModule;
/// <summary>
/// 功能:实现opencvForUnity的简单抠图
/// </summary>
public class My_test11_matting : MonoBehaviour
{
public GameObject rawImage;
// Use this for initialization
void Start()
{
SampleMatting();
}
// Update is called once per frame
void Update()
{
}
void SampleMatting()
{
//把图片读进三通道的容器
var src = Imgcodecs.imread(Application.streamingAssetsPath + "/test11/timg.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);
rawImage.GetComponent<RawImage>().texture = tex;
// var raw = this.GetComponentInChildren();
// raw.texture = tex;
//raw.SetNativeSize();
}
}