Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++/cli, c#] Konwersja z OpenCV::Mat do ImageSource^

Ostatnio zmodyfikowano 2015-03-15 14:40
Autor Wiadomość
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:

C/C++
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?
P-128465
« 1 »
  Strona 1 z 1