week04
- opencv安裝
- 小心1:add opencv to .....path
- 小心2:要安裝在預設的目錄C:\OpenCV2.1
- 請安裝完後重開codeblocks
- 設定Settings-Compiler 要加入3個設定
- search 目錄 Compiler 的 include 目錄 加 C:\OpenCV2.1\include
- search 目錄 Linker 的 lib 目錄 加 C:\OpenCV2.1\lib
- 加入 Linker 的 3個黨名 cv210 cxcore210 highgui210
- 開一個新檔案打week05-1_opencv.cpp找一張圖改名image.jpg放c曹
- #include <opencv/highgui.h>
- int main()
- {
- IplImage*img=cvLoadImage("c:/image.jpg");
- cvShowImage("week05",img);
- cvWaitKey(0);
- }
- 開一個新檔案打week05-2_opencv_webcam.cpp
- 開一個新檔案打week05-3_opencv_many_webcam.cpp
- 解壓縮freeglut-MinGW-3.0.0-1.mp.zip打開freeglut再把lib裡的檔案複製一個變成libglut32.a
再用glut創一個新檔案week05-4_opencv_cvLoadImage
貼上11行程式
在加3行opencv 的程式#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_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glutMainLoop();
} - week05_opencv_opengl_myTexture
glut專案week05_opencv_openg1_myTecture
再貼上moodle老師有個github gidt 網址, 裡面有myTexture.cpp 18行
後面10貼之前程式
最後的glutMainLoop()之前,加入myTexture("")
程式碼:#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可#include <opencv/cv.h>#include <GL/glut.h>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 整數, 叫 貼圖IDglGenTextures(1, &id); /// 產生Generate 貼圖IDglBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖IDglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖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();} - week05_opencv_opengl_myTexture_glTexCoord2f
貼上剛剛的程式碼week05_opencv_opengl_myTexture
加入課本的4行程式
cpp
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
程式碼:#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可#include <opencv/cv.h>#include <GL/glut.h>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 整數, 叫 貼圖IDglGenTextures(1, &id); /// 產生Generate 貼圖IDglBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖IDglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖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);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();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();} - week05_rotating_earth
找一張滿版地球圖取名叫earth.jpg
把week05_opencv_opengl_myTexture的程式拿來用
加上指標 GLUquadric * quad;
程式碼:- #include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
- #include <opencv/cv.h>
- #include <GL/glut.h>
- GLUquadric * quad = NULL;
- 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); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
- 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++,1,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();
- }
.png)
沒有留言:
張貼留言