我想通过imread(opencv)加载后直接在picturebox中显示图像

时间:2015-03-24 09:26:06

标签: c++ visual-studio-2010 user-interface opencv picturebox

我正在Visual Studio 2010中创建一个Windows窗体应用程序。 我采用了buttonpicture box。 我正在从内存中读取图像,我希望这个图像直接显示在图片框中,而不会将其保存在内存中。

以下代码保存图像,然后将其加载到图片框中。 如何改进此代码以执行所需的任务。

 #pragma endregion  private: System::Void btn1_Click(System::Object^  sender, System::EventArgs^  e) {
> 
>                Mat im = imread("C:/Users/Ravi Sharma/Desktop/Koala.jpg");
>     if (im.empty()) 
>     {
>         cout << "Cannot load image!" << endl;
>         exit;
>     }
> 
>   imwrite("C:/Users/Ravi Sharma/Desktop/Koalanew.jpg",im);
>     imshow("Image", im);  
>  picturebox->Image=Image::FromFile("C:/Users/Ravi Sharma/Desktop/Koalanew.jpg");
>            }

经过一些改进 我的新代码是

> System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e) 
> {
>     cv::Mat cvImage = cv::imread("C:/Users/Ravi Sharma/Desktop/Koala.jpg");
> 
>     if (cvImage.empty()) 
>     {
>         cout << "Cannot load image!" << endl;
>         exit;
>     }
> 
>     Bitmap^ bmImage = gcnew Bitmap(cvImage.cols, cvImage.rows, 3 * cvImage.cols, PixelFormat.Format24bppRgb, IntPtr(cvImage.data));
>     Image^ image = static_cast<Bitmap^>(bmImage); 
>      picturebox->Image=Image.bmImage;
>       }

1 个答案:

答案 0 :(得分:0)

您可以从指向包含像素数据的字节数组的指针创建Bitmap(在您的情况下,这是一个cv::Mat对象),然后将其强制转换为{{1} }}:

Image