終於做出來了!!!!
隱形人想了一下,但其實跟LOGG的意思差不多!!!!
現在只差要解決光線問題就會完美了~~
---------------------------------------
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"
#define alpha 0.3
#define alpha2 0.9
#define x1 130
#define y1 170
#define x2 0
#define y2 0
#define refBlue 180
#define refGreen 180
#define refRed 127
#define targetBlue 0
#define targetGreen 0
#define targetRed 240
#define TH 70
CvCapture *capture;
IplImage *frame;
int main(int argc, char** argv )
{
IplImage* pImg = NULL;
IplImage* pImg1 = NULL;
IplImage* pImg2 = NULL;
IplImage* pImg3 = NULL;
IplImage* pImg4 = NULL;
IplImage* logoImg = NULL;
IplImage* logoImg2 = NULL;
IplImage* mergeImg = NULL;
//聲明IplImage指針
//創建視窗
capture=cvCreateCameraCapture(0);
cvNamedWindow("Original Image", 1);
cvNamedWindow("UP&DOWN", 1);
cvNamedWindow("RIGHT&LEFT", 1);
cvNamedWindow("LEFT&RIGHT", 1);
cvNamedWindow("HAHA", 1);
while(1)
{
logoImg2=cvLoadImage("123.jpg");
logoImg=cvLoadImage("112233.jpg");
pImg=cvQueryFrame(capture);
pImg1 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
pImg2 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
pImg3 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
pImg4 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
mergeImg = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U,3);
pImg1=cvCloneImage(pImg);
pImg2=cvCloneImage(pImg);
pImg3=cvCloneImage(pImg);
pImg4=cvCloneImage(pImg);
for (int y=0; y<pImg1->height; y++) {
uchar* ptr1=(uchar*) (pImg1->imageData +y*pImg1->widthStep);
for (int x=0; x<pImg1->width; x++) {
int D= (ptr1[3*x] - refBlue) * (ptr1[3*x] - refBlue) +
(ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
(ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
//printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));
if (sqrt(D) < TH && y < pImg2->height/2) {
ptr1[3*x]=targetBlue;
ptr1[3*x+1]=targetGreen;
ptr1[3*x+2]=targetRed;
}
if (sqrt(D) < TH && y > pImg2->height/2) {
ptr1[3*x]=0;
ptr1[3*x+1]=255;
ptr1[3*x+2]=255;
}
}
}
for (int y=0; y<pImg2->height; y++) {
uchar* ptr1=(uchar*) (pImg2->imageData +y*pImg2->widthStep);
for (int x=0; x<pImg2->width; x++) {
int D= (ptr1[3*x] - refBlue) * (ptr1[3*x] - refBlue) +
(ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
(ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
//printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));
if (sqrt(D) < TH& x < pImg2->width/2) {
ptr1[3*x]=0;
ptr1[3*x+1]=0;
ptr1[3*x+2]=255;
}
if (sqrt(D) < TH && x > pImg2->width/2) {
ptr1[3*x]=0;
ptr1[3*x+1]=255;
ptr1[3*x+2]=255;
}
}
}
for (int y=0; y<pImg3->height; y++) {
uchar* ptr1=(uchar*) (pImg3->imageData +y*pImg3->widthStep);
for (int x=0; x<pImg3->width; x++) {
int D= (ptr1[3*x] - refBlue) * (ptr1[3*x] - refBlue) +
(ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
(ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
//printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));
if (sqrt(D) < TH && x > pImg1->width/2) {
ptr1[3*x]=0;
ptr1[3*x+1]=0;
ptr1[3*x+2]=255;
}
if (sqrt(D) < TH && x < pImg1->width/2) {
ptr1[3*x]=targetBlue;
ptr1[3*x+1]=255;
ptr1[3*x+2]=255;
}
}
}
mergeImg=cvCloneImage(logoImg);
for (int y=0; y<pImg4->height; y++) {
uchar* ptr1=(uchar*) (pImg4->imageData +y*pImg4->widthStep);
uchar* ptr2=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
for (int x=0; x<pImg4->width; x++) {
int D= (ptr1[3*x] - refBlue) * (ptr1[3*x] - refBlue) +
(ptr1[3*x+1] - refGreen) * (ptr1[3*x+1] -refGreen) +
(ptr1[3*x+2] - refRed) * (ptr1[3*x+2] - refRed);
//printf("%d %d %d %.2f\n",ptr1[3*x],ptr1[3*x+1],ptr1[3*x+2], sqrt(D));
if (sqrt(D) < 70 ) {
ptr1[3*x]=ptr2[3*x];
ptr1[3*x+1]=ptr2[3*x+1];
ptr1[3*x+2]=ptr2[3*x+2]; }
}
}
/*if (x < frame->width/2 ) …
if (x > frame->width/2 ) …
if (y < frame->height/2) …
if (y > frame->height/2) …
*/
/*
mergeImg=cvCloneImage(pImg);
for (int y=0; y<logoImg2->height; y++) {
uchar* ptr1=(uchar*) (logoImg2->imageData +y*logoImg2->widthStep);
uchar* ptr2=(uchar*) (mergeImg->imageData +(y+y2)*mergeImg->widthStep);
for (int x=0; x<logoImg2->width; x++) {
if(ptr1[3*(x)] >230 && ptr1[3*(x)+1] >230 && ptr1[3*(x)+2] >230 ){
ptr1[3*(x)]=ptr2[3*(x+x2)] ;
ptr1[3*(x)+1]=ptr2[3*(x+x2)+1] ;
ptr1[3*(x)+2]=ptr2[3*(x+x2)+2] ;
}
}
}
*/
//顯示圖像
cvShowImage( "Original Image", pImg );
cvShowImage( "UP&DOWN", pImg1 );
cvShowImage( "RIGHT&LEFT", pImg2 );
cvShowImage( "LEFT&RIGHT", pImg3 );
cvShowImage( "HAHA", pImg4 );
cvWaitKey(10); //等待按鍵
//銷毀視窗
}
cvReleaseImage( &pImg );
cvReleaseImage( &pImg1 );
cvReleaseImage( &pImg2 );
cvReleaseImage( &pImg3 );
cvReleaseImage( &pImg4 );
//cvReleaseImage( &mergeImg );
cvDestroyWindow( "Original Image" );
cvDestroyWindow( "UP&DOWN" );
cvDestroyWindow( "RIGHT&LEFT" );
cvDestroyWindow( "LEFT&RIGHT" );
cvDestroyWindow( "HAHA" );
//cvDestroyWindow( "Image with Logo" );
}
沒有留言:
張貼留言