#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"
int main()
{
IplImage * frame;
IplImage* mergeImg = NULL;
IplImage* photo01 = NULL;
IplImage* photo02 = NULL;
IplImage* pImg1 = NULL;
int mouseX=0;
int mouseY=0;
CvCapture * capture = cvCreateCameraCapture(0);
frame=cvQueryFrame(capture);
mergeImg = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
pImg1 = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 1);
cvNamedWindow("webcam",0);
cvNamedWindow("Webcam1",0);
crown01 = cvLoadImage("001.jpg");
crown02 = cvLoadImage("002.jpg");
while(true)
{
frame=cvQueryFrame(capture);
cvFlip(frame,frame,1);
cvCvtColor(frame, frame, CV_BGR2YCrCb);
cvInRangeS(frame, cvScalar(0,137,77), cvScalar(256,177,127),pImg1);
frame=cvQueryFrame(capture);
cvFlip(frame,frame,1);
mergeImg=cvCloneImage(frame);
cvLine(mergeImg,cvPoint(300,0),cvPoint(300,800),CV_RGB(255,0,0),3,8,0);
int redPixelNumber=0;
int redPixelX=0;
int redPixelY=0;
for (int y=0; y<pImg1->height; y++)
{
uchar* ptr1=(uchar*) (pImg1->imageData +y*pImg1->widthStep);
for (int x=0; x<pImg1->width; x++)
{
if(ptr1[x]==255)
{
redPixelNumber++;
redPixelX+=x;
redPixelY+=y;
}
}
}
if (redPixelNumber>0)
{
mouseX=redPixelX/redPixelNumber;
mouseY=redPixelY/redPixelNumber;
}
for (int y=0; y<crown01->height; y++)
{
uchar* ptr1=(uchar*) (mergeImg->imageData +(y)*mergeImg->widthStep);
uchar* ptr2=(uchar*) (photo01->imageData +y*photo01->widthStep);
uchar* ptr3=(uchar*) (photo02->imageData +y*photo02->widthStep);
for (int x=0; x<photo01->width; x++)
{
if(ptr2[3*x]!=255)
{
ptr1[3*(x+70)]=ptr2[3*(x)];
ptr1[3*(x+70)+1]=ptr2[3*(x)+1];
ptr1[3*(x+70)+2]=ptr2[3*(x)+2];
}
}
for (int x=0; x<photo02->width; x++)
{
if(ptr2[3*x]!=255)
{
ptr1[3*(x+450)]=ptr3[3*(x)];
ptr1[3*(x+450)+1]=ptr3[3*(x)+1];
ptr1[3*(x+450)+2]=ptr3[3*(x)+2];
}
}
}
for (int y=0; y<photo01->height; y++)
{
uchar* ptr1=(uchar*) (mergeImg->imageData +(y+mouseY-170)*mergeImg->widthStep);
uchar* ptr2=(uchar*) (photo01->imageData + y*photo01->widthStep);
for (int x=0; x<photo01->width; x++)
{
if(mouseX <300)if(ptr2[3*x]!=255)
{
ptr1[3*(x+mouseX-60)]=ptr2[3*(x)] ;
ptr1[3*(x+mouseX-60)+1]=ptr2[3*(x)+1] ;
ptr1[3*(x+mouseX-60)+2]=ptr2[3*(x)+2] ;
}
}
}
for (int y=0; y<photo02->height; y++)
{
uchar* ptr1=(uchar*) (mergeImg->imageData +(y+mouseY-170)*mergeImg->widthStep);
uchar* ptr2=(uchar*) (photo02->imageData + y*photo02->widthStep);
for (int x=0; x<photo02->width; x++)
{
if(mouseX >305)if(ptr2[3*x]!=255)
{
ptr1[3*(x+mouseX-50)]=ptr2[3*(x)] ;
ptr1[3*(x+mouseX-50)+1]=ptr2[3*(x)+1] ;
ptr1[3*(x+mouseX-50)+2]=ptr2[3*(x)+2] ;
}
}
}
cvShowImage("Webcam",pImg1 );
cvShowImage("Webcam1",mergeImg );
char key = cvWaitKey(33);
if(key == 27)break;
}
}
上機考時 聽到考試題目我就知道我完蛋了
從大一下我的程設被當掉開始 程式設計就是我的弱項
寫程式對我來說 就像要一個完全沒下過廚的人 去煮一頓滿漢全席一樣困難
我必須很誠實地說 其實 我還是不太懂這些程式 我依舊還是無法一個人 從無到有 寫出一個不會有bug的程式
老師讓我們做這個心得 可能是要我們知道 考試考零分不要緊 但是剩下的100要去學會完成它 這個道理
以我目前的能力 要我在這短短幾天就要有很好的進步 是不切實際的 但我會繼續努力
或許我走的路比別人多 比別人長 但是只要持之以恆 就像馬拉松一樣 我即使沒辦法當第一名 但我也能走到終點
每個人都有自己的優點 我很會想鬼點子 很喜歡搞不一樣的東西 手工也很有自信 所以我能跟別人合作 來彌補我的弱項 放大我的優點 這或許是老師在課堂上要我們分組的原因 我的程式弱 但是我會做其他東西來彌補我的缺點 讓其他城市強的同學來cover我 這也是之後要在社會上生存競爭的"團隊合作"啊!
之後 很高興有修到這門課 學了好多的專業知識 做了許多很滿足的專題 還有許多令人興奮的成品 真的很充實 很有成就感!
沒有留言:
張貼留言