[c++/cli, c#] Konwersja z OpenCV::Mat do ImageSource^
Ostatnio zmodyfikowano 2015-03-15 14:40
Szadziu Temat założony przez niniejszego użytkownika |
[c++/cli, c#] Konwersja z OpenCV::Mat do ImageSource^ » 2015-03-15 14:40:24 Dzień dobry. Piszę aplikację składającą się z dwóch projektów. Jednym jest biblioteka dll napisane w c# (WPF) zawierająca interfejs użytkownika, drugim natomiast cała logika opisana w c++. Program ma przetwarzać obrazy dlatego zdecydowałem się na wykorzystanie biblioteki OpenCV. Problem pojawił się przy konwersji obrazu z OpenCV na WPF, aby go wyświetlić. Szukam sposobu na konwersje cv::Mat do ImageSource, który mogę umieścić w wpf'owej kontrolce Image. Oto dotychczasowy kod: auto openDialog = gcnew SWF::OpenFileDialog();
auto result = openDialog->ShowDialog();
if( result == SWF::DialogResult::OK ) { cv::Mat img = cv::imread( ToStdString( openDialog->FileName ) ); ImageToDisplay = imageSourceFromCVMat( img ); }
SWM::ImageSource ^ imageSourceFromCVMat( cv::Mat mat ) { System::IntPtr ptr( mat.ptr() ); System::Drawing::Bitmap ^ b; auto type = mat.type(); switch( mat.type() ) { case CV_8UC3: b = gcnew System::Drawing::Bitmap( mat.cols, mat.rows, mat.step, System::Drawing::Imaging::PixelFormat::Format32bppRgb, ptr ); break; case CV_8UC1: b = gcnew System::Drawing::Bitmap( mat.cols, mat.rows, mat.step, System::Drawing::Imaging::PixelFormat::Format8bppIndexed, ptr ); break; default: b = gcnew System::Drawing::Bitmap( mat.cols, mat.rows, mat.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ptr ); break; } SWM::ImageSourceConverter ^ converter = gcnew SWM::ImageSourceConverter(); return( SWM::ImageSource ^ )( converter->ConvertFrom( b ) ); }
Niestety w przypadku Bitmap nie udaje się konwersja na SWM::ImageSource^ (ostania linijka), a w przypadku innego rozszerzenia konstruktor System::Drawing::Bitmap, nie jest w stanie tego przetrawić. Czy zna ktoś sposób na uniwersalną konwersję z cv::Mat na ImageSource? |
|
« 1 » |