2013年6月1日 星期六
98360835_蔣達緯_考試心得
for (int y=0; y<picture1->height; y++) //第一個for載入第一個圖
{
uchar* ptr1=(uchar*) (picture1->imageData +y*picture1->widthStep);
uchar* ptr2=(uchar*) (frame->imageData +y*frame->widthStep);
for (int x=0; x<picture1->width; x++)
{
int D= (ptr1[3*x] - Blue) * (ptr1[3*x] - Blue) + //D這邊是去被
(ptr1[3*x+1] - Green) * (ptr1[3*x+1] -Green) +
(ptr1[3*x+2] - Red) * (ptr1[3*x+2] - Red);
if(sqrt(D) > TH){ //如果開根號D的值大於我們定義的TH150則代表去被
ptr2[3*(x)]=ptr1[3*(x)];
ptr2[3*(x)+1]=ptr1[3*(x)+1];
ptr2[3*(x)+2]=ptr1[3*(x)+2];
}
}
}
//這邊載入圖片的程式碼,在考試的過程中遇到的問題是去背,套入上方將非白色部分顯示出來即完成去背的工作
if (skinPixelNumber>0) {
mouseX=skinPixelX/skinPixelNumber-50.0; //原先的位子在中心點, 現在要在頭頂必須要y向上移動所以要減一定的數值
mouseY=skinPixelY/skinPixelNumber-120.0;
}
這裡的程式碼在之前的膚色判斷作業中是在膚色上畫上十字線,由於這次的考試是要將黃冠戴於頭頂,因此必須將座標減少數值判斷點才會往上方移動。
if( (picture1->height + mouseY) < frame->height && mouseX<160) {
for (int y=0; y<picture1->height; y++) {
uchar* ptr1=(uchar*) (picture1->imageData +y*picture1->widthStep);
uchar* ptr2=(uchar*) (frame->imageData +(y+mouseY)*frame->widthStep);
for (int x=0; x<picture1->width; x++) {
int D= (ptr1[3*x] - Blue) * (ptr1[3*x] - Blue) +
(ptr1[3*x+1] - Green) * (ptr1[3*x+1] -Green) +
(ptr1[3*x+2] - Red) * (ptr1[3*x+2] - Red);
if(sqrt(D) > TH){
ptr2[3*(x+mouseX)]=ptr1[3*(x)];
ptr2[3*(x+mouseX)+1]=ptr1[3*(x)+1];
ptr2[3*(x+mouseX)+2]=ptr1[3*(x)+2]; }
}
}
}
//由膚色判斷完之後,在此地方放上黃冠的圖片。這邊有放上D的公式去背。
心得:
這一次的考試沒有完成的主要原因在於,了解問題的所在,但卻用錯方法以致沒有辦法完成主要目標。如:原先去背的方式是以判斷圖片若非255則顯示,這樣會有圖片不完整的情形。還有膚色的座標判斷沒有辦法到主要的位置。在與同學討論之後,完成了這一次所有的考試內容,也順利的將有漏洞的地方調整至完美的狀態。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言