日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity抠人像原理_OpenCV For Unity 实现简单抠图

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 实现简单抠图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。