1

画像付きのOpenCVウィンドウを開く非常に基本的なGstreamer要素を実行しようとしています。

私の要素には、select_points.cppにあるselect_points()というウィンドウを開く関数のみを呼び出すチェーン関数があります。

chain_function:

static GstFlowReturn
gst_georeg_chain (GstPad * pad, GstBuffer * buf)
{
  GstGeoreg *filter;

  georeg_val gvals;

  filter = GST_GEOREG (GST_OBJECT_PARENT (pad));

  get_data(&gvals);

  select_points(&gvals);

  return gst_pad_push (filter->srcpad, buf);
}

select_points.cppに、次のコードがあります

#include <stdio.h>
#include "datasetup.h"
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;

extern "C" void select_points(georeg_val *gvals) //plugin is in C
{
  IplImage* img=0; 
  img=cvLoadImage(gvals->imageName,1);
  if(!img) 
  {
    printf("Could not load image file: \n$%s$\n",gvals->imageName);
  }
  else
  {        
    printf("Image was loaded\n");
    cvNamedWindow("Select", CV_WINDOW_AUTOSIZE); 

    cvMoveWindow("Select", 200, 200); // offset from the UL corner of the screen

    cvShowImage("Select",img);

    cvDestroyWindow("Select");
    cvReleaseImage(&img); 

  }

}

問題は、要素を使用してパイプラインを実行すると、cvNamedWindowを呼び出すときにハングすることです。助言がありますか?select_points()をコメントアウトすると、他のすべてが正常に機能します。

4

1 に答える 1

1

まず、 gstreamer パイプラインがアクティブ化される前に、関数cvNamedWindow()から出入りします。select_points()main()

次に、ウィンドウを表示したい場合は、 が呼び出されたcvWaitKey(0);後に への呼び出しを追加する必要がありますcvShowImage()。そうしないと、画像が表示された直後にウィンドウが破棄され、何も表示されなくなります。

:)

于 2012-05-03T23:08:32.813 に答える