我想在gtkmm編寫的Gui中顯示cv :: Mat。所以我做了一個測試。display opencv cv ::在gtkmm中的Mat圖像
我有一個小部件Gtk::Image image
,我想有以下兩種方法設置圖像:
// first method, display from file
void displayImage1()
{
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file("gtk.png");
image.set(pixbuf);
}
// second method, display from cv::Mat
void displayImage2()
{
cv::Mat outImage = cv::imread("gtk.png");
cv::cvtColor(outImage, outImage, CV_BGR2RGB);
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_data(outImage.data, Gdk::COLORSPACE_RGB,false, 8, outImage.cols, outImage.rows, outImage.step);
image.set(pixbuf);
}
第一種方法效果很好。
然而,第二種方法不作爲圖片所示工作良好,我得到的屏幕上的圖像破壞。
如果我設置has_alpha參數設置爲true,結果也怪(見照片。下文)。
類似的測試通過使用Gtk :: DrawingArea完成。使用不同的IDE(但是Linux下的所有g ++編譯器)。所有相同的結果。
更新:
我測試了很多圖片。有時圖像被破壞,有時程序崩潰
程序意外完成。
是否檢查圖像實際上並不包含alpha通道?對我來說似乎是這樣,除非灰色背景是圖像的一部分。 – KjMag
@KjMag THANKS,但has_alpha爲「true」的結果也不正確,我更新了問題的結果。 –
24而不是8作爲「bits_per_sample」? – Miki