• 締切済み

OpenCVのcvNamedWindowによるウインドウスタイル操作について

OpenCVのhighguiに準備されているcvNamedWindow関数を利用してウインドウを作成しています. タイトルバーや枠線すべてを取り払った描画領域だけのウインドウを作りたいのですが, 標準ではウインドウスタイルを変更できないので,highguiのソースをいじって cvNamedWindow関数中の    DWORD defStyle; を    WS_POPUP 指定にすることでタイトルバーを消すことができました. しかしウインドウの四方の枠線だけが残ります(グレーで太さは3pixelくらい). この枠線も削除したいと考えていますが, どのようなスタイルを指定すればよいか, あるいはスタイル以外での実現方法があればご教示ください. かなりの期間悩んでいるのでお手上げです>< なお,環境は以下の通りです. VC+2008 EE OpenCV 1.0

みんなの回答

回答No.1

 こんばんは。  windowを2枚重ねで構成している様です。 mainhWnd = CreateWindow( "Main HighGUI class", name, WS_POPUP, rect.x, rect.y, rect.width, rect.height, 0, 0, hg_hinstance, 0 ); if( !mainhWnd ) CV_ERROR( CV_StsError, "Frame window can not be created" ); ShowWindow(mainhWnd, SW_SHOW); hWnd = CreateWindow("HighGUI class", "", WS_CHILD, CW_USEDEFAULT, 0, rect.width, rect.height, mainhWnd, 0, hg_hinstance, 0); if( !hWnd ) CV_ERROR( CV_StsError, "Frame window can not be created" ); ShowWindow(hWnd, SW_SHOW);  として見ては如何でしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • XPではタイトルバーが無いウィンドウは作成できないのですか?

    以前、98でアプリを作成していたときは CreateWindow関数でWS_POPUP指定でタイトルバーが 無いウィンドウを作れていたのですが、XPで同様に WS_POPUP指定するとウィドウが生成されません。 参考書のサンプルプログラムの通りに記述しても 駄目でした。 これは仕様でしょうか? どうすればタイトルバーが無いウィンドウが作成できるのでしょうか? コンパイラはBorland C++ Compilerを使っています。 なお、ウィンドウは実行されなくても、プロセスは 動き続けている事がタスクマネージャから確認できました。

  • 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; } ----------------------------------------------------------------

  • ウインドウスタイルの、WS_EX_TOPMOST

    引き続きVC++2008でWindowsフォームアプリケーションを作っています。 WindowsAPIでのウインドウ製作中です。 今Form1を親とするウインドウで、CreateWindowEx内のウインドウスタイルの個所の引数にWS_EX_TOPMOSTを指定したのですが どうも最前面に表示されてくれないようです。 これは何か他にやらないといけない事があるのでしょうか? なお、CreateWindowEx関数は現在、最初の引数を WS_EX_TOOLWINDOW にして、WS_EX_TOPMOST以外のウインドウスタイルは WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX がある状態です。

  • ウィンドウのサイズ変更について

    タイトルバーがないウィンドウのサイズ変更について質問です。 タイトルバーがあるウィンドウでは、 ウィンドウの端にマウスカーソルを合わせると サイズ変更のカーソルに変わってサイズ変更が出来ますけど、 タイトルバーがないウィンドウでは出来ないのですが、 どうすればサイズ変更が出来るようになるのでしょうか? CreateWindowEx()には、 拡張ウィンドウスタイルには、 WS_EX_TOOLWINDOW | WS_EX_LAYERED | WS_EX_ACCEPTFILES ウィンドウスタイルには、 WS_POPUPWINDOW | WS_BORDER を渡しています。 開発環境 XP Visual Studio 2005 C、C++

  • OpenCV2.0でView Morphing

    環境はVisual Studio 2008 Express, OpenCV2.0です。 サポートされない実験的な関数にあるビューモーフィング関数を使い、2枚の画像から中間の画像を生成し、ウインドウに表示させるプログラムを作りたいです。 このpdfファイル(http://www.hci.otago.ac.nz/downloads/ViewMorphing_full.pdf)内の「10. Appendix B - Image Morphing in OpenCV」という箇所にあるコードを、以下のような定型文で囲んでみたんですけど、コンパイル時に分からないエラーが沢山出てきて解決できずに困っています。 どこか根本的な部分が抜けていて間違っているような気がするので、あらかじめ必要な宣言が抜けているとか、間違っていることに気づいた方がいらっしゃれば何でもいいので教えてください。よろしくお願いします。 #include <cv.h> #include <highgui.h> #include <cvaux.h> #pragma comment(lib, "cv200.lib") #pragma comment(lib, "highgui200.lib") #pragma comment(lib, "cvaux200.lib") int main(int argc, char** argv[]) { IplImage* morphedImage; IplImage* leftImage; IplImage* rightImage; cvNamedWindow("出力画像"); leftImage = cvLoadImage("left.jpg"); rightImage = cvLoadImage("right.jpg"); //------------------------------------------- ここに処理を入れる //------------------------------------------- // 表示ウインドウに画像を表示 cvShowImage("出力画像", _morphedImage); // キー入力待機 cvWaitKey(0); //表示ウインドウの破棄 cvDestroyWindow("出力画像"); cvReleaseImage(&leftImage); cvReleaseImage(&rightImage); cvReleaseImage(&morphedImage); //画像領域の解放 return 0; }

  • WindowsAPIの、ウインドウの表示非表示

    WindowsAPIのCreateWindowEx関数で作った 例えば第一引数が WS_EX_TOOLWINDOW|WS_EX_TOPMOST で第四引数が WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX のウインドウを、何かのアクションがあったときいったん非表示にしてから、また何かのアクションがあった時に表示させるには、どのような物を使うのがベストなのでしょうか? プロシージャ内(HWNDはhw)で一例として(…?)試しに以下だけのものでやってみると long lStyle = GetWindowLong(hw, GWL_STYLE); lStyle = ~WS_VISIBLE; SetWindowLong(hw, GWL_STYLE, lStyle); 確かに非表示扱いにはなるようなのですが、これだけではスクリーンは再描画されず、再描画されるには人為的に別ウインドウを移動したりしないといけません。 おそらく「何かによって再描画させられれば」出来ると思うのですが それはどうすれば実現できるのでしょうか? また、これより もっと「こっちの方がいい」といった方法はありますでしょうか?

  • OpenCV処理画像をpictureBoxへ。

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

  • opencv1.0 画面が真っ黒

    以前までXPを使用しVisual C++ 2008にopencv1.0を導入し、USB接続のwebカメラから 画像をキャプチャしリアルタイムでの画像処理などのプログラミングしていたのですが、 このたびOSをXP(32bit) からwindows7(64bit)に変え、前使っていた環境つまり Visual C++ 2008 opencv1.0 で設定したところ、コンパイルは正常にでき、普通にpng画像などを取り込むような画像処理は可能なのですが、webカメラからの画像が読み込めず、真っ黒な画像が表示されてしまいました。 ちなみに実行したプログラムはXPの時には正常に作動していたものと同じものを実行しています。 また、webカメラ自体はamcapなどのソフトを使い動作させることはできます。 自分なりに考えた問題点は、 プログラムに問題がある、またはvisualC++を2010にする、opencvを2.2などの最新版に 更新するなどがあげられますが、 この場合なにが原因として考えられるのでしょうか? その点アドバイスいただけたらうれしく思います。 よろしくお願いします。 実行したプログラムは以下の通りです(取り込んだ画像を表示しているだけの、シンプルなプログラムです。直すところなどありましたら教えてください。) *************************************************** #include <cv.h> #include <highgui.h> #pragma comment(lib,"cv.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"highgui.lib") int main(int argc, char** argv){ int key; CvCapture* capture; capture=cvCreateCameraCapture(-1); IplImage *frameImg =cvQueryFrame(capture); cvNamedWindow("Capture" ,CV_WINDOW_AUTOSIZE); while(1){ cvShowImage("Capture",frameImg); key = cvWaitKey(1); if(key=='q') break; } cvReleaseCapture(&capture); cvDestroyWindow("Capture"); return 0; } ****************************************************

  • Visual Windows for BC++の設定方法を教えてください。

    BCC Developper で リンク:CV.lib, cxcore.lib highgui.lib を設定してビルドできるプログラムがあります。 これをVisual Winows for BC++ でビルドしようとすると、コンパイルはできるのですが、リンクでエラーになります。 Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_cvLoadImage' が未解決(D:\PROJ2\DEBUG\OPENCV1.OBJ が参照) Error: 外部シンボル '_cvNamedWindow' が未解決(D:\PROJ2\DEBUG\OPENCV1.OBJ が参照) Error: 外部シンボル '_cvCloneImage' が未解決(D:\BCCPROJ\PROJ2\DEBUG\OPENCV1.OBJ が参照) Error: 外部シンボル '_cvGetSize' が未解決(D:\BCCPROJ\PROJ2\DEBUG\OPENCV1.OBJ が参照) 以下省略 libファイルのあるフォルダは指定してありますので、直接libファイルを指定しなければいけないと思うのですが、直接指定する方法がわかりません。 なおコマンドラインで、 bcc32 -WC -6 -Od -w- -AT -pc -H- -k -b -v -y -eDebug\proj2.exe Debug\opencv1.obj D:\OpenCV\lib\cv.lib D:\OpenCV\lib\cxcore.lib D:\OpenCV\lib\highgui.lib では正常にビルドできます。

  • [WinAPI]リージョンウィンドウとシステムメニューについて

    C言語でWINDOWSプログラムを組んでいます。 リージョンウィンドウでウィンドウを作成した場合、終了処理や最小化など基本的にシステムがやってくれることも自分で書く必要があると思うのですが、いい方法が見つかりません。 お粗末なやり方ですが、WS_SYSMENUやWS_MINIMIZEBOX等のウィンドウスタイルを無理やりに使って、その場をしのいでいます。 しかし、最小化・元に戻すなどを行ったときに、一瞬ですがクラシックスタイルのキャプションバーが表示されます。 また、画面の外で最小化->元に戻すを行った場合、リージョンウィンドウの左上に重なってキャプションバーが描画されてしまい、見た目が悪いです。 以下の方法について解答お願いいたします。 1.タスクバー(タスクトレイではない)で右クリックしたときに表示されるPOPUPメニューの作り方。 2.タスクバーを左クリックしたときのアクティブ化と最小化・元に戻す、イベント処理。 3.もしくは、WS_SYSMENUを使わずにシステムに基本的な処理を任せる方法。 説明不足でしたら補足いたしますので、ご回答お願いいたします。

このQ&Aのポイント
  • らくぷりの強力粘着タイプ(透明)には、透明フィルムラベルと透明UVカットフィルムの2種類があります。
  • ラベルとフィルムの見分け方を教えてください。
  • エレコム株式会社の製品について知りたいです。
回答を見る