void cvthin(cv::mat& src, cv::mat& dst, int intera)
//非原地操作時候,copy src到dst
if(dst.data!=src.data)
int i, j, n;
int width, height;
width = src.cols -1;
//之所以減1,是方便處理8鄰域,防止越界
height = src.rows -1;
int step = src.step;
int p2,p3,p4,p5,p6,p7,p8,p9;
uchar* img;
bool ifend;
int a1;
cv::mat tmpimg;
//n表示迭代次數
for(n = 0; n0)
if(p[-step+1]==0&&p[1]>0) //p3,p4 01模式
if(p[1]==0&&p[step+1]>0) //p4,p5 01模式
if(p[step+1]==0&&p[step]>0) //p5,p6 01模式
if(p[step]==0&&p[step-1]>0) //p6,p7 01模式
if(p[step-1]==0&&p[-1]>0) //p7,p8 01模式
if(p[-1]==0&&p[-step-1]>0) //p8,p9 01模式
if(p[-step-1]==0&&p[-step]>0) //p9,p2 01模式
p2 = p[-step]>0?1:0;
p3 = p[-step+1]>0?1:0;
p4 = p[1]>0?1:0;
p5 = p[step+1]>0?1:0;
p6 = p[step]>0?1:0;
p7 = p[step-1]>0?1:0;
p8 = p[-1]>0?1:0;
p9 = p[-step-1]>0?1:0;
if((p2+p3+p4+p5+p6+p7+p8+p9)>1 && (p2+p3+p4+p5+p6+p7+p8+p9)<7 && a1==1)}}
}}
dst.copyto(tmpimg);
img = tmpimg.data;
for(i = 1; i < height; i++)
if(p[-step+1]==0&&p[1]>0) //p3,p4 01模式
if(p[1]==0&&p[step+1]>0) //p4,p5 01模式
if(p[step+1]==0&&p[step]>0) //p5,p6 01模式
if(p[step]==0&&p[step-1]>0) //p6,p7 01模式
if(p[step-1]==0&&p[-1]>0) //p7,p8 01模式
if(p[-1]==0&&p[-step-1]>0) //p8,p9 01模式
if(p[-step-1]==0&&p[-step]>0) //p9,p2 01模式
p2 = p[-step]>0?1:0;
p3 = p[-step+1]>0?1:0;
p4 = p[1]>0?1:0;
p5 = p[step+1]>0?1:0;
p6 = p[step]>0?1:0;
p7 = p[step-1]>0?1:0;
p8 = p[-1]>0?1:0;
p9 = p[-step-1]>0?1:0;
if((p2+p3+p4+p5+p6+p7+p8+p9)>1 && (p2+p3+p4+p5+p6+p7+p8+p9)<7 && a1==1)}}
}}
//如果兩個子迭代已經沒有可以細化的畫素了,則退出迭代
if(!ifend) break;
}}
效果比較好的頭髮shader
效果如下 渲染頭髮時可能會遇到如下問題 1.因為頭髮本質上是乙個乙個的透明的麵片,理所當然會想到使用 blend 混合方式來渲染。但當由於用 blend 時,要關閉z快取寫,即執行 zwirte off,不然透明的區域也會遮擋後面的畫素。此時就會出現問題,頭髮之間的層級會完全混亂,因為頭髮是多個麵片...
還是 push 比較好
以前在 js 中往乙個陣列裡 放數 用的是 a i i 的形式,就像這樣 var testarray new array for var i 1 i m i 這樣寫可能會引起問題,看似 testarray 0 沒有被賦值,但是此時賦值完畢以後你會發現 testarray.length 的值為 m 1...
AsyncTask 比較好的解釋
package com.example.asynctask import android.os.asynctask import android.widget.progressbar import android.widget.textview 生成該類的物件,並呼叫execute方法之後 首先執行...