魚鱗☆゚.*・。電腦圖學 Week05
1. OpenCV 安裝☆゚.*・。
(1)桌面 -> 葉正聖老師上課用軟體 -> -OpenCV-2.1.0-win32-vs2008.exe☆゚.*・。
(2)小心1:Add OpenCV to ... PATH
(3)小心2:要安裝在預設的 C:\OpenCV2.1 目錄裡
(4)請安裝完後,重開 CodeBlocks
(5)設定 Settings-Compiler 要加入3個設定
(5-1)Compiler 的 include 目錄
(5-2)Linker 的 lib 目錄
(5-3)加入 linker 的3個檔名 cv210、cxcore210、highgui210
2. week05-1_opencv.cpp ~程式讀取圖檔~☆゚.*・。
(1)CodeBlocks -> File -> New -> Empty File 新增一個新的程式檔
(2)存一張jpg格式的圖檔放在C槽
(3)打程式:
int main()
{
IplImage * img = cvLoadImage("c:/image.jpg");
cvShowImage("week05", img);
cvWaitKey(0);
}
(4)執行程式,圖就會出來了
3. 看課本範例☆゚.*・。
(1)到老師目錄:http://jsyeh.org/3dcg10 ☆゚.*・。
(2)下載 win32 和 data ☆゚.*・。
(3)解壓縮windows.zip和data.zip☆゚.*・。
(4)把data資料夾放入windows資料夾☆゚.*・。
(5)進入 Texture.exe ☆゚.*・。
(6)可以更動的部分,考試必考的程式
4. week05_opencv_cvLoadImage ~程式讀取圖檔和畫圖形~☆゚.*・。
(1)在桌面安裝freeglut☆゚.*・。
(2)新增glut專案---> week05_opencv_cvLoadImage ☆゚.*・。
(3)複製貼上11行程式(包含glClear)☆゚.*・。
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glutMainLoop();
}
(4)新增剛剛教OpenCV的讀取圖片的3行程式
#include <opencv/highgui.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
IplImage * img = cvLoadImage("c:/image.jpg");
cvShowImage("week05", img);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glutMainLoop();
}
5. week05_opencv_opengl_myTexture ~貼圖貼圖形~☆゚.*・。
(1)新增glut專案---> week05_opencv_opengl_myTexture ☆゚.*・。
(3)複製 "MyTexture.cpp" 的18行程式並在專案上貼上
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
(4)把剛剛 "week05-1_opencv.cpp" 的程式貼上並修改及新增
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
myTexture("c:/image.jpg");
glutMainLoop();
}
(5)執行程式,就能得到有貼圖的茶壺了
5. week05_opencv_opengl_myTexture_glTexCoord2f ~圖形背後新增圖檔背景~☆゚.*・。
(1)新增glut專案---> week05_opencv_opengl_myTexture_glTexCoord2f ☆゚.*・。
(2)把剛剛 "week05_opencv_opengl_myTexture" 的程式貼上
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
myTexture("c:/image.jpg");
glutMainLoop();
}
6. week05_rotating_earth~旋轉的地球~☆゚.*・。
(1)新增glut專案---> week05_rotating_earth ☆゚.*・。
(2)把剛剛 "week05_rotating_earth" 的程式貼上
(3)新增並修改程式
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * quad =NULL;
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename);
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glPushMatrix();
glRotatef(90, 1, 0, 0);
glRotatef(angle++, 0, 0, 1);
gluSphere(quad, 1, 30 ,30);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week05");
glutIdleFunc(display);
glutDisplayFunc(display);
myTexture("c:/earth.jpg");
quad = gluNewQuadric();
gluQuadricTexture(quad, 1);
glutMainLoop();
}
(4)執行程式,就能得到會旋轉的地球了
7. 上傳到Github☆゚.*・。








沒有留言:
張貼留言