week05
OpenCV安裝
1. 桌面葉正聖老師上課用軟體安裝OpenCV
2. 小心 (1) : Add OpenCV to ... PATH
3. 小心 (2) : 要安裝在預設的 C:OpenCV2.1 目錄裡
4. 請安裝完後 , 重開 CodeBlocks
5. 設定 Settings-Compiler 要加入3個設定
5.1. search 目錄 Compiler 的 include 目錄裡 C:\OpenCV2.1\include
5.2. search 目錄 Linker 的 link目錄 C:\OpenCV2.1\lib
5.3. 加入 Linker 的3個檔名 cv120 cxcore210 highgui210
week05-1
1. 打程式碼
2. 在網路上儲存一張圖片 並取名為 image.jpg
3. 就可以在小黑顯示出來了
///File-New 空白檔案 , 成 week05-1_opencv.cpp
#include <opencv/highgui.h>
int main()
{///Intel performanse library
IplImage * img = cvLoadImage("c:/image.jpg");
cvShowImage("week05", img);
cvWaitKey(0);
}
課本範例
1. jsyeh.org/3dcg10 下載 data win32
2. windows.zip => 下載 \windows\Texture.exe
3. data.zip = ? 下載 \windows\data\一堆圖檔
4. 把 data 拉進 windows 資料夾
5. 執行 Texture.exe
6.改 glTexCoord2f ( tx , ty ) ; 貼圖座標, glVertex3f ( x , y , z );頂點
week05_opencv_cvLoadImage
1. 安裝 freeglut 在桌面 , 並把 lib\libfreeglut.a 複製成 libglut32.a
2. File-New-Project , GLUT專案 , week05_opencv_cvLoadImage
3.貼上11行 GLUT程式
4.加上 OpenCV 的程式
5. 就會同時顯示圖片跟茶壺
#include <GL/glut.h>
#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("opencv", img);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03_mouse");
glutDisplayFunc(display);
glutMainLoop();
}
week05_opencv_opengl_myTexture
1. File-New-Project , GLUT專案 week05_opencv_opengl_myTexture
2. 在moodle老師有個 Github Gist 網址 , 裡面有 myTexture.cpp 18行
3. 貼到你的專案的 main.cpp 的前面 18 行
4. 後面 10 行, 貼你之前的 GLUT 程式
5. 最後的 glutMainLoop( ) 之前 , 加入 myTexture("c:/image.jpg")
6. 這樣剛剛的圖片就會印在茶壺上了
week05_opencv_opengl_myTexture_glTexCoord2f
1. File-New-Project , GLUT專案 week05_opencv_opengl_myTexture_glTexCoord2f
2. 貼上剛剛的程式碼
3. 在25行加入課本的4行程式
```cpp
glBegin(GL_POLYGON);
glTexCoord2f(0,0); glVertex2f(-1,-1)
glTexCoord2f(0,1); glVertex2f(-1,+1)
glTexCoord2f(1,1); glVertex2f(+1,+1)
glTexCoord2f(1,0); glVertex2f(+1,-1)
glEnd();
```
4.背景圖上下倒過來
week05_rotating_earth
1. google找地球圖片 , 滿版的地圖 , 存 C:\earth.jpg
2. File-New-Project , GLUT專案 week05_rotating_earth
3. 把 week05_opencv_opengl_myTexture 的程式拿來用
4. 加上指標 GLUquadric * quad;
5.結果就會顯示會轉的地球了
///把week05_opencv_opengl_myTexture 程式拿來改
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * quad = NULL; ///todo: 要有一科指標
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖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;
}
///再貼上10行GLUT程式(不要貼剛剛的程式)
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();
///glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05");
glutIdleFunc(display);
glutDisplayFunc(display);
myTexture("c:/earth.jpg");
quad = gluNewQuadric(); ///把這顆指標指好
gluQuadricTexture(quad, 1);///todo: 做好地球的貼圖
glutMainLoop();
}












沒有留言:
張貼留言