2013年6月9日 星期日
課程回顧
1. What is your favorite homework?
我最喜歡我的期末作業,原本只是隨便找個題目去做,
順便挑戰一下自己的能力,雖然在製作過程中,
真的遇到了超級多瓶頸,但花了8個小時還是完成了,
這種成就感真的非常的大,尤其最後做出來後跟心裡想要的效果沒差多少就很開心,
所以這是我這學期最喜歡的一個作業,雖然有點辛苦,但真的很好玩!!!
2. What did you learn in this course?
學會用視訊結合程式碼做出想要的程式,
以前都是用既有的軟體來設計,
現在就真的是用自己寫出的程式碼來做,
這大概是我這學期最大的收穫,
以及能將程式集合硬體做出更真實互動的方式!!
真的非常棒!!!
3. What did you change after this course?
要對自己更負責任,
因為期中發生的一些事,
我從組別變成一個人一組,
所以整個期末都得靠自己的想法做出東西來~~
這應該是我最大的轉變吧~
2013年5月27日 星期一
2013年5月13日 星期一
皮膚偵測
今天的作業是皮膚偵測~~
做了鋼鐵人面具 超酷的!!!
-------------------------------------
#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);
}
}
2013年5月6日 星期一
隱形人
終於做出來了!!!!
隱形人想了一下,但其實跟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" );
}
2013年4月29日 星期一
00360124_吳鍾昊_相框
今天的作業我整個DE了一整節課的BUG!!!
我的程式一直溢位....
最後才發現一個小小的關鍵 導致我程式的問題!!!
找到後真的超有成就感!!!
不過中間真的想到快發瘋了!!!!!!
-----------------------
#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
CvCapture *capture;
IplImage *frame;
int main(int argc, char** argv )
{
IplImage* pImg = NULL;
IplImage* bImg = NULL;
IplImage* gImg = NULL;
IplImage* rImg = NULL;
IplImage* logoImg = NULL;
IplImage* logoImg2 = NULL;
IplImage* mergeImg = NULL;
//聲明IplImage指針
//創建視窗
capture=cvCreateCameraCapture(0);
cvNamedWindow("Original Image", 1);
cvNamedWindow("Blue Image", 1);
cvNamedWindow("Green Image", 1);
cvNamedWindow("Red Image", 1);
cvNamedWindow("Image with Logo", 1);
logoImg=cvLoadImage("logo.jpg");
while(1)
{
logoImg2=cvLoadImage("123.jpg");
pImg=cvQueryFrame(capture);
bImg = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
gImg = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
rImg = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
mergeImg = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U,3);
//為圖像申請空間
// Get blue pixels
for (int y=0; y<pImg->height; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (bImg->imageData +y*bImg->widthStep);
for (int x=0; x<pImg->width; x++) {
ptr2[3*x]=ptr1[3*x];
ptr2[3*x+1]=0;
ptr2[3*x+2]=0;
}
}
// Get green pixels
for (int y=0; y<pImg->height; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (gImg->imageData +y*gImg->widthStep);
for (int x=0; x<pImg->width; x++) {
ptr2[3*x]=0;
ptr2[3*x+1]=ptr1[3*x+1];
ptr2[3*x+2]=0;
}
}
// Get red pixels
for (int y=0; y<pImg->height; y++) {
uchar* ptr1=(uchar*) (pImg->imageData +y*pImg->widthStep);
uchar* ptr2=(uchar*) (rImg->imageData +y*rImg->widthStep);
for (int x=0; x<pImg->width; x++) {
ptr2[3*x]=0;
ptr2[3*x+1]=0;
ptr2[3*x+2]=ptr1[3*x+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] ;
}
}
}
if( (logoImg->height + y1) < pImg->height) {
//mergeImg=cvCloneImage(pImg);
for (int y=0; y<logoImg->height; y++) {
uchar* ptr1=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
uchar* ptr2=(uchar*) (pImg->imageData +(y+y1)*pImg->widthStep);
for (int x=0; x<logoImg->width; x++) {
ptr2[3*(x+x1)]=alpha*ptr1[3*(x)] + (1-alpha)*ptr2[3*(x+x1)];
ptr2[3*(x+x1)+1]=alpha*ptr1[3*(x)+1] + (1-alpha)*ptr2[3*(x+x1)+1];
ptr2[3*(x+x1)+2]=alpha*ptr1[3*(x)+2] + (1-alpha)*ptr2[3*(x+x1)+2];
}
}
}
//顯示圖像
cvShowImage( "Original Image", pImg );
cvShowImage( "Blue Image", bImg );
cvShowImage( "Green Image", gImg );
cvShowImage( "Red Image", rImg );
cvShowImage( "Image with Logo", logoImg2 );
cvWaitKey(10); //等待按鍵
//銷毀視窗
}
cvReleaseImage( &pImg );
cvReleaseImage( &bImg );
cvReleaseImage( &gImg );
cvReleaseImage( &rImg );
cvReleaseImage( &mergeImg );
cvDestroyWindow( "Original Image" );
cvDestroyWindow( "Blue Image" );
cvDestroyWindow( "Green Image" );
cvDestroyWindow( "Red Image" );
cvDestroyWindow( "Image with Logo" );
}
2013年4月22日 星期一
00360124_吳鍾昊_自畫像
今天作業是WebCam然後製作效果,
感覺滿好玩的!!!!!
原來網路上那些效果其實沒有那麼難嘛~~~
-----------------------------------------------------------
-----------------------------------------------------------
#include<cv.h>
#include<highgui.h>
int main()
{
CvCapture *capture;
IplImage *frame;
IplImage* pImg = NULL;
IplImage* pImg2 = NULL;
IplImage* gray = NULL;
IplImage* bw = NULL;
IplImage* pCannyImg = NULL;
capture=cvCreateCameraCapture(0);
cvNamedWindow("Webcam",1);
cvNamedWindow("Webcam1",1);
cvNamedWindow("Webcam2",1);
cvNamedWindow("Webcam3",1);
cvNamedWindow("Webcam4",1);
while(1)
{
frame = cvQueryFrame(capture);
pImg = cvQueryFrame(capture);
pImg2 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);
gray = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 1);
bw = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 1);
pCannyImg = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
cvCvtColor(pImg, gray, CV_BGR2GRAY);
cvThreshold( gray, bw, 120, 255, CV_THRESH_BINARY );
cvThreshold( pImg, pImg2, 127, 255, CV_THRESH_BINARY );
cvCanny(gray, pCannyImg, 50, 150, 3);
cvShowImage("Webcam", pImg);
cvShowImage("Webcam1", gray);
cvShowImage("Webcam2", bw);
cvShowImage("Webcam3", pCannyImg);
cvShowImage("Webcam4", pImg2);
cvWaitKey(10);
}
cvReleaseCapture(&capture);
cvDestroyWindow("Webcam");
}
訂閱:
文章 (Atom)




