2012-03-06 75 views
-1

我用“imwrite”显示的BackgroundImage是成功的窗口形式显示的图像,但它到磁盘损坏:opencv C++:如何在windows窗体应用程序中显示摄像头捕获?

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) 
{ 
    namedWindow("video",0); 
    VideoCapture cap(0); 
    flag = true; 
    while(flag){ 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     **imwrite("vdo.jpg",frame);** 
     this->panel1->BackgroundImage = System::Drawing::Image::FromFile("vdo.jpg");           
     waitKey(5); 
     delete panel1->BackgroundImage; 
     this->panel1->BackgroundImage = nullptr; 
    } 
} 

当我试图显示不imwrite并使用“位图”,它不会在这里工作是来源:

this->panel1->BackgroundImage = System::Drawing::Bitmap(frame); 

我的代码有什么问题吗?感谢您的帮助:)))

+1

“它不会工作”是不是问题描述 – 2012-03-06 14:22:31

+0

[如何在Windows窗体应用程序中显示cv :: Mat的可能的重复?](http://stackoverflow.com/questions/9580397/how-to-display-a-cvmat-in-a -Windows形式施用) – mevatron 2012-03-08 04:23:50

回答

0

我认为这是因为位图的构造函数不会将类Mat直接作为参数。 你应该将数据从OPENCV垫自行转换为.NET位图 :)

0

对于显示图像,你可能需要这个(另一种选择),

pictureBox1->Image = gcnew //replacement of cvShowImage 

System::Drawing::Bitmap(Img->width, Img->height, Img->widthStep, 

System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)Img->imageData); 

pictureBox1->Refresh();