2013年6月9日 星期日
期末考上機考
題目: 在左右視窗可以分別戴上不同的皇冠
第一步將視窗分邊,不是甚麼大問題
cvLine(mergeImg,cvPoint(325,0),cvPoint(325,500),CV_RGB(255,0,0),3,8,0);
圖片資訊 是將圖片讀取,將白色的部分去除,放上視窗方便確認皇冠有沒有帶錯
pic1=cvLoadImage("p1.jpg");
pic2=cvLoadImage("p2.jpg");
for (int y=0; y<logoImg1->height; y++) {
uchar* ptr1=(uchar*) (pic1->imageData +y*pic1->widthStep);
uchar* ptr2=(uchar*) (mergeImg->imageData +y*mergeImg->widthStep);
uchar* ptr3=(uchar*) (pic2->imageData +y*pic2->widthStep);
for (int x=0; x<logoImg1->width; x++) {
if(ptr1[3*x]>=0 && ptr1[3*x]<250)
{ //圖片非白色的部份放到視訊中
ptr2[3*(x+162)]=ptr1[3*(x)];
ptr2[3*(x+162)+1]=ptr1[3*(x)+1]; //圖片加入視訊
ptr2[3*(x+162)+2]=ptr1[3*(x)+2];
DEBUG的部分
我沒有辦法正常偵測皮膚顏色進而移動皇冠
最後才加上皮膚偵測,和紅十字的當作指標
for (int y=0; y<src->height; y++) {
uchar* ptr1=(uchar*) (grey->imageData +y*grey->widthStep);
for (int x=0; x<grey->width; x++) {
if(ptr1[x]==255) {
PointNumber++;
PointX+=x;
PointY+=y;
}
}
}
if (PointNumber>0) {
mouseX=(int)(PointX/PointNumber);
mouseY=(int)(PointY/PointNumber);
}
cvLine(mergeImg,cvPoint(mouseX-10,mouseY),cvPoint(mouseX+10,mouseY),CV_RGB(255,0,0),2,8,0);
cvLine(mergeImg,cvPoint(mouseX,mouseY-10),cvPoint(mouseX,mouseY+10),CV_RGB(255,0,0),2,8,0);
為了增加視訊辨識度 還把枕頭套拿來當背景
發現背後的牆壁會影響視訊偵測的品質。
心得:
經過這次皮膚偵測應用上,一個程式他是死的,你要怎麼去用不同的方式去修正你自己的程式,出來的結果一樣,但是裏頭有自己對於這程式的看法,和其他人交流,進一步改正自己錯誤的想法,吸收新的知識!
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言