現在地: メニュー >> 発展編05 >> 発展編05::ImagingSubSet >> 発展編05::グレイスケール化2 >> 発展編05::まとめコード3

問題


以下の画像を読み込んで、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);
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます