• atwiki
  • ProMemo
  • [OpenCVで読み込んだ画像をOpenGLで出力-CPP]の変更点

「OpenCVで読み込んだ画像をOpenGLで出力-CPP」の編集履歴(バックアップ)一覧はこちら

OpenCVで読み込んだ画像をOpenGLで出力-CPP」(2009/09/24 (木) 23:37:22) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*&this_page() |&tags()|解説|最終更新日 &date()|&link_pdf(text=PDFで表示)|[[ダウンロード>http://www20.atwiki.jp/yosilove?cmd=upload&act=open&pageid=17&file=CVGL_sample.zip]]| OpenCVで読み込んだ画像(IPL Image)はBGRなので、RGBに変換してOpenGLのウィンドウに出力する。 #contents *CVGL_samp.cpp //[OpenCV@Chihara-Lab.] 高度なGUI //http://chihara.naist.jp/opencv/?%B9%E2%C5%D9%A4%CAGUI // //[2009/9/23] GLUI部分を削除/カラー画像の読み込み #include <iostream> #include <GLUT/glut.h> #include <cv.h> #include <highgui.h> IplImage *inputImage; /* 表示用 */ IplImage *image; IplImage *rgbImage; void initializeImageProcessing() { /* ここにプログラム起動時の行う画像処理を書く */ //inputImage = cvLoadImage("img/bmp/Mandrill.bmp", CV_LOAD_IMAGE_GRAYSCALE); // グレースケール inputImage = cvLoadImage("img/bmp/Mandrill.bmp", CV_LOAD_IMAGE_ANYCOLOR); /* ここまで */ } void imageProcessing() { /* ここに適当な画像処理を書く.imageに最終的な出力を行う. */ cvErode(inputImage, image, 0, erosions); // 例えば縮退処理を行なう /* ここまで */ } void display() { imageProcessing(); glClear(GL_COLOR_BUFFER_BIT); glPixelZoom(1, -1); glRasterPos2i(0 , 0); rgbImage = cvCloneImage(image); //IPL形式の画像(BGR)をOpenGL形式(RGB)に変換 if (image->nChannels >= 2) { // BGR(A) -> RGB(A) for (int i = 0; i < image->width * image->height * image->nChannels; i = i + image->nChannels) { rgbImage->imageData[i] = image->imageData[i + 2]; rgbImage->imageData[i + 2] = image->imageData[i]; } } //チャンネルに応じて書き込み方を変更 switch (image->nChannels) { case 1: glDrawPixels(image->width, image->height, GL_LUMINANCE, GL_UNSIGNED_BYTE, image->imageData); break; case 3: glDrawPixels(image->width, image->height, GL_RGB, GL_UNSIGNED_BYTE, rgbImage->imageData); break; case 4: glDrawPixels(image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, rgbImage->imageData); break; default: break; } //出力 glFlush(); } void glInit() { glClearColor(0.0, 0.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, image->width - 1.0, image->height - 1.0, 0.0, -1.0, 1.0); } void cvInit() { initializeImageProcessing(); /* 表示する画像のサイズやチャネル数を設定する(とりあえずIPL_DPETH_8Uは固定)*/ image = cvCreateImage(cvSize(inputImage->width, inputImage->height), IPL_DEPTH_8U, 3); //image = cvCreateImage(cvSize(inputImage->width, inputImage->height), IPL_DEPTH_8U, 1);グレースケール } int main(int argc, char *argv[]) { //OpenCVの初期化 cvInit(); //OpenGLとGLUTの初期化 //(OpenCVみたいにまとめないのはargcとargvが必要だから?) glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(image->width, image->height); mainWindowID = glutCreateWindow("IplImage"); glutDisplayFunc(display); glInit(); //メインループ突入(displayを繰り返し実行) glutMainLoop(); return 0; } *Makefile **Mac CXX = g++ -Wall -O2 CC = gcc -Wall -O2 CXXFLAGS = `pkg-config --cflags opencv` LDFLAGS = `pkg-config --libs opencv` FRAMEWOKS = -framework OpenGL -framework GLUT -framework Foundation .cpp: $(CXX) $@.cpp $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ .c: $(CC) $@.c $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ *実行方法 コンパイルする make CVGL_samp 実行する ./CVGL_samp *実行結果 #image(17-result.png,title=実行結果) *テスト環境 |MacOSX 10.5.8| |OpenCV 0,23| |OpenGL| |GLUT| *Tanks [[OpenCV@Chihara-Lab. : 高度なGUI>http://chihara.naist.jp/opencv/?%B9%E2%C5%D9%A4%CAGUI]] 上記のサンプルコードはこの方の作成したものを微修正したものです。 修正内容は「入力画像をカラーにした」「GLUI部分の削除」です。 ----
*&this_page() |&tags()|解説|最終更新日 &date()|&link_pdf(text=PDFで表示)|[[ダウンロード>http://www20.atwiki.jp/yosilove?cmd=upload&act=open&pageid=17&file=CVGL_sample.zip]]|View &counter(total)| OpenCVで読み込んだ画像(IPL Image)はBGRなので、RGBに変換してOpenGLのウィンドウに出力する。 #contents *CVGL_samp.cpp //[OpenCV@Chihara-Lab.] 高度なGUI //http://chihara.naist.jp/opencv/?%B9%E2%C5%D9%A4%CAGUI // //[2009/9/23] GLUI部分を削除/カラー画像の読み込み #include <iostream> #include <GLUT/glut.h> #include <cv.h> #include <highgui.h> IplImage *inputImage; /* 表示用 */ IplImage *image; IplImage *rgbImage; void initializeImageProcessing() { /* ここにプログラム起動時の行う画像処理を書く */ //inputImage = cvLoadImage("img/bmp/Mandrill.bmp", CV_LOAD_IMAGE_GRAYSCALE); // グレースケール inputImage = cvLoadImage("img/bmp/Mandrill.bmp", CV_LOAD_IMAGE_ANYCOLOR); /* ここまで */ } void imageProcessing() { /* ここに適当な画像処理を書く.imageに最終的な出力を行う. */ cvErode(inputImage, image, 0, erosions); // 例えば縮退処理を行なう /* ここまで */ } void display() { imageProcessing(); glClear(GL_COLOR_BUFFER_BIT); glPixelZoom(1, -1); glRasterPos2i(0 , 0); rgbImage = cvCloneImage(image); //IPL形式の画像(BGR)をOpenGL形式(RGB)に変換 if (image->nChannels >= 2) { // BGR(A) -> RGB(A) for (int i = 0; i < image->width * image->height * image->nChannels; i = i + image->nChannels) { rgbImage->imageData[i] = image->imageData[i + 2]; rgbImage->imageData[i + 2] = image->imageData[i]; } } //チャンネルに応じて書き込み方を変更 switch (image->nChannels) { case 1: glDrawPixels(image->width, image->height, GL_LUMINANCE, GL_UNSIGNED_BYTE, image->imageData); break; case 3: glDrawPixels(image->width, image->height, GL_RGB, GL_UNSIGNED_BYTE, rgbImage->imageData); break; case 4: glDrawPixels(image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, rgbImage->imageData); break; default: break; } //出力 glFlush(); } void glInit() { glClearColor(0.0, 0.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, image->width - 1.0, image->height - 1.0, 0.0, -1.0, 1.0); } void cvInit() { initializeImageProcessing(); /* 表示する画像のサイズやチャネル数を設定する(とりあえずIPL_DPETH_8Uは固定)*/ image = cvCreateImage(cvSize(inputImage->width, inputImage->height), IPL_DEPTH_8U, 3); //image = cvCreateImage(cvSize(inputImage->width, inputImage->height), IPL_DEPTH_8U, 1);グレースケール } int main(int argc, char *argv[]) { //OpenCVの初期化 cvInit(); //OpenGLとGLUTの初期化 //(OpenCVみたいにまとめないのはargcとargvが必要だから?) glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(image->width, image->height); mainWindowID = glutCreateWindow("IplImage"); glutDisplayFunc(display); glInit(); //メインループ突入(displayを繰り返し実行) glutMainLoop(); return 0; } *Makefile **Mac CXX = g++ -Wall -O2 CC = gcc -Wall -O2 CXXFLAGS = `pkg-config --cflags opencv` LDFLAGS = `pkg-config --libs opencv` FRAMEWOKS = -framework OpenGL -framework GLUT -framework Foundation .cpp: $(CXX) $@.cpp $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ .c: $(CC) $@.c $(CXXFLAGS) $(LDFLAGS) $(FRAMEWOKS) -o $@ *実行方法 コンパイルする make CVGL_samp 実行する ./CVGL_samp *実行結果 #image(17-result.png,title=実行結果) *テスト環境 |MacOSX 10.5.8| |OpenCV 0,23| |OpenGL| |GLUT| *Tanks [[OpenCV@Chihara-Lab. : 高度なGUI>http://chihara.naist.jp/opencv/?%B9%E2%C5%D9%A4%CAGUI]] 上記のサンプルコードはこの方の作成したものを微修正したものです。 修正内容は「入力画像をカラーにした」「GLUI部分の削除」です。 ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー