我正在尝试做一个非常基本的 Gstreamer 元素,它打开一个带有图像的 OpenCV 窗口。
在我的元素中,我有一个仅调用名为 select_points() 的开窗函数的链函数,该函数位于 select_points.cpp 中。
链函数:
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(),其他一切都可以正常工作。