今天的作業是皮膚偵測~~
做了鋼鐵人面具 超酷的!!!
-------------------------------------
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include "cxcore.h"
#define refBlue 168
#define refGreen 182
#define refRed 205
CvCapture *capture;
int main(){
IplImage* pImg = NULL;
IplImage* pImg2 = NULL;
IplImage* pImg1 = NULL;
IplImage* logoImg= NULL;
int mouseX=0;
int mouseY=0;
CvPoint P1,P2,P3,P4;
CvScalar Color;
logoImg=cvLoadImage("12311.png");
capture=cvCreateCameraCapture(0);
cvNamedWindow("Original Image", 1);
cvNamedWindow("123", 1);
while(true){
pImg=cvQueryFrame(capture);
pImg1 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 1);
pImg2 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
cvCvtColor(pImg, pImg, CV_BGR2YCrCb);
cvInRangeS(pImg, cvScalar(0,137,77), cvScalar(256,177,127),pImg1);
pImg=cvQueryFrame(capture);
pImg2=cvCloneImage(pImg);
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;
}
P1 = cvPoint(mouseX-10,mouseY);
P2 = cvPoint(mouseX+10,mouseY);
P3 = cvPoint(mouseX,mouseY-10);
P4 = cvPoint(mouseX,mouseY+10);
Color=CV_RGB(255,0,0);
//cvLine(pImg2,P1,P2,Color,2,8,0);
//cvLine(pImg2,P3,P4,Color,2,8,0);
for (int y=0; y<logoImg->height; y++) {
uchar* ptr1=(uchar*) (pImg2->imageData +(y+mouseY-110)*pImg2->widthStep);
uchar* ptr2=(uchar*) (logoImg->imageData + y*logoImg->widthStep);
for (int x=0; x<logoImg->width; x++) {
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] ;}
}
}
cvShowImage( "Original Image", pImg2 );
cvShowImage( "123", pImg1 );
cvReleaseImage( &pImg2 );
cvWaitKey(10);
}
}
沒有留言:
張貼留言