最終更新: mikk_ni3_92 2009年01月29日(木) 18:29:22履歴
現在地: メニュー >> 発展編05 >> 発展編05::ImagingSubSet >> 発展編05::グレイスケール化2 >> 発展編05::まとめコード3
以下の画像を読み込んで、ImaginSubsetを使って「グレイスケール画像」で描画せよ。
以下の画像を読み込んで、ImaginSubsetを使って「グレイスケール画像」で描画せよ。
#include <iostream> #include <GL/glut.h> #include <cv.h> #include <highgui.h> //----------- 各種外部変数 -----------------// const char *filename = "test2.jpg"; IplImage *imgA; //グレイスケール変換用行列 float MatForGray[16] = { 0.30f, 0.30f, 0.30f, 0.0f, 0.59f, 0.59f, 0.59f, 0.0f, 0.11f, 0.11f, 0.11f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; //------------ プロトタイプ宣言 ---------------------// void display(); void reshape(int w, int h); //------------- OpenGLの初期設定 --------------------// void GLUT_INIT() { glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE); glutCreateWindow("Imaging Subset"); } void GLUT_CALL_FUNC() { glutDisplayFunc(display); glutReshapeFunc(reshape); } void MY_INIT() { glClearColor(1.0, 1.0, 1.0, 1.0); glutReshapeWindow(imgA->width, imgA->height); //ウィンドウサイズを画像と合わせる } //------------- メイン関数 ------------------// int main(int argc, char **argv) { glutInit(&argc,argv); GLUT_INIT(); GLUT_CALL_FUNC(); imgA = cvLoadImage( filename, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if(imgA ==NULL){ std::cerr<< filename <<" : Can't Load Image .\n"; return -1; } MY_INIT(); glutMainLoop(); return 0; } //-------------- ここから各種コールバック -----------------// void display() { glClear(GL_COLOR_BUFFER_BIT); glDrawPixels(imgA->width,imgA->height,GL_BGR,GL_UNSIGNED_BYTE,imgA->imageData); glutSwapBuffers(); } void reshape(int w, int h) { glViewport(0, 0, w, h); glPixelZoom(static_cast<float>(w)/imgA->width, -static_cast<float>(h)/imgA->height); glRasterPos2i(-1, 1);//スクリーンのサイズが(2×2) //グレイスケール化 glMatrixMode(GL_COLOR); glLoadMatrixf(MatForGray); glMatrixMode(GL_MODELVIEW); }