【发布时间】:2017-02-24 19:39:33
【问题描述】:
我正在使用 gtkmm 3 开发一个简单的 OpenCV (v3.1) 视频捕获应用程序,现在我正在尝试通过将 Mat 对象加载到 DrawingArea 中Cairo::Context。程序如下:
int main(int argc, char *argv[]){
Gtk::Window* mainWindow;
Gtk::DrawingArea* videoBackground;
auto app = Gtk::Application::create(argc, argv, "com.twallis.OSD");
Mat inImage, outImage;
inImage = cv::imread("blackbackground.jpg", IMREAD_COLOR);
cvtColor(inImage, outImage, CV_BGR2RGB);
/*LOAD WIDGETS FROM BUILDER FILE*/
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create();
try{
builder->add_from_file("OSD_drawing_background1.glade");
}
catch(const Glib::FileError& ex){
std::cerr << "fileError: " << ex.what() << endl;
return 1;
}
catch(const Glib::MarkupError& ex){
std::cerr << "MarkupError: " << ex.what() << endl;
return 1;
}
catch(const Gtk::BuilderError& ex){
std::cerr << "BuilderError " << ex.what() << endl;
return 1;
}
builder->get_widget("mainWindow", mainWindow);
builder->get_widget("videoBackground", videoBackground);
Cairo::RefPtr<Cairo::Context> cairoContext = videoBackground- >get_window()->create_cairo_context();
Gdk::Cairo::set_source_pixbuf(cairoContext, Gdk::Pixbuf::create_from_data(outImage.data, Gdk::COLORSPACE_RGB, false, 8, outImage.cols, outImage.rows, outImage.step));
mainWindow->add(*videoBackground);
videoBackground->queue_draw();
return app->run(*mainWindow); }
当我编译程序时使用:g++ -std=c++11 -Wall -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib -g OSDDrawingWindow.cpp -o drawing -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs pkg-config gtkmm-3.0 gtk+-3.0 --cflags --libs
我没有收到任何警告,但立即运行程序会导致段错误。这是为什么呢?
【问题讨论】:
标签: c++ opencv c++11 gtk gtkmm