• 締切済み

OpenCVの画像表示について。

OpenCVにて画像処理ソフトをつくっています。 VC++で、まず簡単に開くボタンから画像を開き、ピクチャーボックス、またはウィンドウに画像を表示するものを作ろうと思います。 しかし、ソースの中にファイル名を指定することでしか画像を開く方法しか方法がわかりません。 どのようにしてボタンを設置すればよいのでしょうか? また、プロジェクトの種類はWin32だけでしか作れないのでしょうか? OpenCVを使い始めたばかりの者でとても的外れな質問だとは思いますが、どうぞよろしくお願いいたします。

みんなの回答

回答No.1

 こんにちは。  私も的外れかもしれません。 >>どのようにしてボタンを設置すればよいのでしょうか?  VC++の製品版ならば、「リソースエディタ」が有る筈なので、それを利用して「ボタン」をダイアログの上に配置します。 >>また、プロジェクトの種類はWin32だけでしか作れないのでしょうか?  MFC等でも出来ます。元からメニューバー等があるので、MFCの方が楽だと思います。  う~む、要するにそこらのWindowsアプリに良くある「ファイルを××」ダイアログを開きたいのでしょうか。  其れにはGetOpenFileName()/SaveOpenFileName()を使用すれば良いと思います。  検索すると沢山出て来ますので、詳しい使用の仕方が分かると思います。  http://www.google.co.jp/search?hl=ja&q=getopenfilename&lr=&aq=1&oq=getopen ------------------------------------------------------------------ char arrBuf[MAX_PATH] = {'\0'}; OPENFILENAME ofn = {sizeof(OPENFILENAME)}; ofn.lpstrTitle = "ダイアログのタイトル名"; ofn.lpstrFile = arrBuf; ofn.nMaxFile = sizeof(arrBuf); ofn.hInstance = ::GetModuleHandle(0); ofn.hwndOwner = hWnd; //ofn.lpstrInitialDir = "初期のディレクトリパス" if(::GetOpenFileName(&ofn) == TRUE) { //確定した。arrBufにファイル名が入っている //OpenCVの関数にarrBufのファイル名を渡して読み込む } ------------------------------------------------------------------  取り敢えずは、ボタンやメニューを搭載した後、押されたら反応して上記の様なコードを実行させれば、初期の目的だけは達成されると思います。

s0511146
質問者

お礼

早くの回答ありがとうございます。 無事に画像を表示させることができました。 次はOpenCVのライブラリーで処理した画像を表示させるよう、 がんばってみたいと思います。

関連するQ&A

  • OpenCVで処理した画像の表示方法。

    VC++でOpenCVを使って画像処理を研究中です。 OpenCVでの画像の表示は、 char *filename = "lena.jpg"; image = cvLoadImage(filename, CV_LOAD_IMAGE_COLOR); cvNamedWindow ("lena", CV_WINDOW_AUTOSIZE); cvShowImage ("lena",image); で出来るということは分かりました。 しかし、MFCで作ったフォームのピクチャーボックスへの表示の仕方が分かりません。 画像処理は実行ボタンでpictureBox1の元の画像をpictureBox2に表示させようと考えております。 回答のほど、どうぞよろしくお願いいたします。 また、分かりやすいサイトなどありましたらお願いします。

  • opencvを用いて画像を表示したいです(初心者です)

    こんばんは。 opencvを用いて画像処理をしようと思っているのですが、下のページの通りにプロジェクトを作成し、ビルドを行ったのですが、 http://www.saturn.dti.ne.jp/~npaka/robot/opencv/index.html 「cxcore100.dllが見つからなかったため、このアプリケーションを開始できませんでした。」 という表示が出てしまいます。cxcore100.dllは C:\Program Files\OpenCV\bin←この中に見つけたのですが、どうしていいかわかりません。 どなたか、おわかりになる方ご教授願えないでしょうか?

  • OpenCV処理画像をpictureBoxへ。

    VC++にて画像処理を行っています。 OpenCVのライブラリを使って画像処理をしようと考えているのですが、 処理した画像がMFCで作成したpitureBoxに表示の仕方が分かりません。 調べていくうちに、 「IplImage形式の画像を直接ウィンドウに描画することは出来ないので、 画像をDIBセクション形式に変換してWindows固有の描画処理を行うといい。」 ということが分かり、DIBセクション形式への変換には、IPLを入手し、 「iplConvertToDIB()関数」を使うということが分かりました。 このiplConvertToDIB()関数をつかって画像表示の方法を教えてはいただけないでしょうか?サンプルのソースなどありましたらよろしくお願いいたします。

  • Opencvのエラーについて

    Opencvでカメラからの画像をキャプチャし、保存するシステムを作っているのですが、写真のようなエラーがはかれてしまいます。 現在開発済みのもの:VB2010でのプロジェクト・OpenCVでのプロジェクト (1)Form1を起動(VB2010) & ShellでOpenCVのプロジェクトのexeファイルを実行(OpenCV) (2)Form1に配置したボタン1を押す → OpenCV側にキーを送り、写真を撮影・保存 (3)Form1に配置したボタン2を押す → Form1を再起動 & OpenCV側にキーを送り、OpenCVのプロジェクトを再起動 → ボタン1を押すと添付写真のようなエラーがはかれます。 純粋に再起動をかけているだけだからエラーがでるのが不思議ですし、OpenCVのプロジェクト単体では、問題なく動作します。 まったく理由がわからないので、わかる方どうぞよろしくお願いします。

  • OpenCVで画像の一部を取り出す。

    VC++でOpenCVにて画像処理をしています。 CvRect rec = cvRect(30,120,160,50); cvSetImageROI(tmp_img1, rec); これを使って画像の一部を取り出そうと思うのですが、 取り出した部分以外を白にする仕方が分かりません。 分かる方がいらっしゃいましたらよろしくお願いいたします。

  • Opencvで質問

     Opencv初心者です。  今日opencvとVC++2010を設定して今練習中なのですが   #include <stdexcept>   #include <opencv/cv.h>   #include <opencv/highgui.h>   int main (int argc, char* argv[]){   const char *fileName = "C:\\Program Files\\OpenCV2.3.1\\samples\\c\\lena.jpg";   const char *windowName = "lena";   ::IplImage* img = ::cvLoadImage(fileName);   ::cvNamedWindow(windowName);   ::cvShowImage(windowName,img);   ::cvWaitKey();   ::cvDestroyWindow(windowName);   ::cvReleaseImage(&img);   }  と言うサンプルをビルドしたら  1>------ ビルド開始: プロジェクト: 画像処理練習, 構成: Debug Win32 ------  1>LINK : fatal error LNK1104: ファイル 'opencv_core231.lib' を開くことができません。  ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========  エラーが出てしまい先に進めません。  もしかしたら他に設定が悪いのでしょうか?  インストールもC:\Program Files\OpenCV2.3.1に名前も変えインストールしました。  ttp://shiotani.cn/20110904vc2010opencv.html  ここを参考にさせていただきました。 よろしくお願いします。

  • 画像の表示について

    1.imageボックスを用いた場合、pictureプロパティで画像を参照した後Stretch=Trueにするとそのimageの大きさに合わせて画像を縮小して表示してくれます。   pictureボックスのときはその大きさに合わせて画像を縮小して表示できません。AutoSize=tureにしても画像の大きさにpictureボックスが大きくなってしまうだけです。 pictureボックスにはそのような縮小機能はないのでしょうか? 指定する画像を縮小して保存し直すしかないのでしょうか? そうすると表示したい大きさに合わせるのが大変で・・・。 2.ひとつのフォーム上に与えられた変数によって 画像を表示したいと考えています。 私たちが習ったのは 1. まずpictureボックスを1つ用意する。 2. 表示したい枚数だけimageボックスを準備しその中に画像をpictureプロパティで指定する。(画像5枚につきimageボックス5つ) 3. textボックスに数字をいれcommandボタンをおす。 4. その値によって picture1.piture=image1.picture という具合で表示させる。 こうなると表示したい画像が10枚あればimageボックスが 10個必要になりますよね。 そうなるとフォーム上がごちゃごちゃなってしまいます。 そうしないように画像をアドレスを指定して直接いれることはできませんか? image1.picture="gazou1.bmp"(エラーでした・・・。)みたいな感じで・・・。 そうするとimageボックスを1つしか作らなくてよいのですっきりするのですが。 以上2つよろしくお願いします。

  • opencvで画像上に丸を描画の方法

    opencv初心者です。 visualstudio2012 C++でopencvを動かすことはできているのですが、目的としてフルスクリーンに表示した画像の上に2点を丸でいいので表示したいのですが、画像しか表示されない、もしくは画像とは別のウィンドウで丸が表示される状態になっています。 // OpenCV2.4Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" //プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに // opencv2のあるフォルダ『C:\OpenCV\include』などを追加のこと #include "opencv2\opencv.hpp" #include <opencv2/core/core.hpp> #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts243d.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video243d.lib") #else //Releaseモードの場合 #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts243.lib") #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video243.lib") #endif //int _tmain(int argc, _TCHAR* argv[]) int gazouhyouzi(){ //画像データの読込 IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\fruits.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (src_img == NULL){ std::exit(0); } //処理後画像データの確保 // IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels); //画像処理例(ガウシアンフィルタ) // cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9); //表示ウィンドウの作成 cvNamedWindow("src",0); //srcというwindowをフルスクリーンに設定 cvSetWindowProperty("src",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN); //画像の表示 cvShowImage ("src", src_img); //キー入力待ち cvWaitKey (0); cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3); // 画像,円の中心座標,半径,色,線太さ,種類 cv::circle(img, cv::Point(100, 100), 20, cv::Scalar(200,0,0), -1, CV_AA); //画像データの解放 cvReleaseImage(&src_img); //全てのウィンドウの削除 cvDestroyAllWindows(); return 0; } とても見づらいとは思いますが間違っている部分の訂正をお願いしたく、投稿しました。 初心者なもので言葉の表現が間違っているかも知れませんが、よろしくおねがいします。 ちなみに上記のプログラムで実行すると、画像だけがフルスクリーンに表示されるだけです。

  • OpenCVで画像を読み込みたい

    OpenCVを勉強しようと思い先日始めました。 http://chihara.naist.jp/opencv/?FrontPage 上記のサイトに掲載されている通りにVC++ 2008 EEで ・環境変数PATH ・インクルードファイル ・ライブラリファイル ・リンカ の設定をしました。 これでいざプログラムをコンパイルして実行すると何故か画像が読み込んでくれません。 これらの設定以外の他にするべきことがあるのでしょうか? いきなり出鼻を挫かれたので困っています。よろしくお願いします。 OS:XP SP2 開発環境:VC++ 2008 EE 実行したプログラム ---------------------------------------------------------------- #include "cv.h" #include "highgui.h" int main( int argc, char** argv ) { IplImage* img; char* filename = "abc.bmp"; if( argc == 2 && (img = cvLoadImage( filename, 1)) != 0 ) { cvNamedWindow( "Image view", 1 ); cvShowImage( "Image view", img ); cvWaitKey(0); // イベント処理を含む場合には,これが重要. cvDestroyWindow( "Image view" ); cvReleaseImage( &img ); return 0; } return -1; } ----------------------------------------------------------------

  • Bitmap画像の消去について

    やりたいこととして Bitmap画像を表示する前になにかしら背景が描画されています。 そしてボタンを押すとか何かしらイベントが起こったときにBitmap画像を描画します。 そしてまたボタンを押すと背景はそのままでそのBitmap画像だけを消去する ということがしたいです。 今、ピクチャーボックスを使ってBitmap画像を表示することはできます。 ただそのBitmap画像を消去することはできていません。 探しているとピクチャーボックスを白く塗りつぶして、背景を再描画するって方法はあるのですが、いろいろあってその方法は使いたくないです。 Bitmap画像だけを消去する方法はあるのでしょうか? OSはVistaで、VC++2003.netを使っています。 宜しくお願いします。

専門家に質問してみよう