• 締切済み

openCVのトラックバーについて

OpenCV.jpのトラックバーのサンプルを使用して、トラックバーを複数個作りたいです。 サンプルにあるように2つの場合は、トラックバーと下の黒い部分が近いのですが、トラックバーを増やしていくと徐々に離れてしまいます(図)。 これは仕様でしょうか、それともプログラムで直せるものでしょうか。 分かる方、よろしくお願いします。 OpenCV.jpサンプルプログラム http://opencv.jp/sample/simple_gui.html#trackbar Cで作成しています。

みんなの回答

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.5

インストールして試してみたのですが(XP(Vista) + VC++2008 Ex + OpenCV 1.1pre), どうもTrackbarのサイズや余白の計算について、一貫性がなく、 また、それらをマニュアルで指定する関数も見当たらず、 「今の動作は仕様なんだけれども、バグがある」というような感じを受けてます。 誠に申し訳ないですが、この問題、私には解決できかねます。

negative-X
質問者

お礼

ご回答ありがとうございました。 確かに空白が大きくなるのは仕様・バグですね。 諦めます。 何度もご回答していただいたり、 わざわざインストールしていただいたりと、 ご丁寧にありがとうございました。

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.4

あと、cvResizeWindowは、 cvCreateTrackbar ("Trackbar3", "Image", 0, 100, on_trackbar3); の後に呼ばないと意味がないのではないかという気もする。 直感的には、cvCreateTrackbar()で、ウィンドウに自動的にリサイズがかかり、 cvResizeWindowで事前にセットした値は書き換えられるのではないかと。

negative-X
質問者

補足

ご回答ありがとうございます。 No.3のcvNamedWindowを2にしてみると、 ウィンドウサイズをマウスで変更できるようになりました。 しかし、ウィンドウ内の黒く塗られている部分のサイズを変更できるだけで、トラックバーについては変更できません。 No.4のcvResizeWindowの位置ですが、 cvNamedWindowの後・cvCreateTrackbarの後にやった場合では大した違いは見当たらず、 どちらもバーの下に空白が出来ます。 他にどのような可能性が考えられますでしょうか。 お手数ですが、よろしくお願いします。

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.3

cvNamedWindowのflagはデフォルトでCV_WINDOW_AUTOSIZE (=1)で省略可能 と、 http://tessy.org/wiki/index.php?OpenCV%A4%CE%A5%A6%A5%A3%A5%F3%A5%C9%A5%A6 にあります。2を指定してみると挙動が変わるということはないですか。

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.2

それは、cvNamedWindow("name", CV_WINDOW_AUTOSIZE); のCV_WINDOW_AUTOSIZEを消去していないからではないでしょうか。 cvNamedWindow("name"); cvResizeWindow("name", size_x, size_y); 当該部分のソースコードを貼ってもらったほうが、 解決への近道ではないかと思うのですが。

negative-X
質問者

補足

ご回答ありがとうございます。 ソースに大した変更点は無いのですが main(int argc, char *argv[]){ img = cvCreateImage (cvSize (400, 200), IPL_DEPTH_8U, 3); cvZero (img); cvInitFont (&font, CV_FONT_HERSHEY_DUPLEX, 1.0, 1.0, 0, 1, 8); cvNamedWindow ("Image", 1); cvResizeWindow("Image", 400, 100); cvCreateTrackbar ("Trackbar1", "Image", 0, 100, on_trackbar1); cvCreateTrackbar ("Trackbar2", "Image", 0, 100, on_trackbar2); cvCreateTrackbar ("Trackbar3", "Image", 0, 100, on_trackbar3); …} です。 cvResizeWindowのx部分を変更すると、 トラックバーの長さが変わりますが、空白はあります。 yを変更しても特に変化がありません。 cvNamedWindow には("Image",1)のように、 何か数字またはCV_WINDOW_AUTOSIZEを入れないとエラーになるので 1を入れています。 よろしくお願いします。

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

openCVを見たことも触ったこともないので、仕様かどうかはわかりませんが ちょっとぐぐって見たら、以下のようにして明示的にサイズを指定できるようです。 cvResizeWindow("sample01", 640, 480); 自分でサイズを計算で求めて指定したらどうでしょう。

negative-X
質問者

お礼

ご回答ありがとうございました。 教えて頂いたcvResizeWindowを試してみましたが、 図のtrackbar3の下の空白を消すことは出来ませんでした。 またよろしくお願いします。

関連するQ&A