2017-02-24 82 views
0

opencvでC++で作成したdllにビットマップを渡す必要があります。 DLLでは、画像を処理するためにMatオブジェクトを使用します。 BitmapオブジェクトをMatオブジェクトに変更する方法を知りたい私はIntPtrを使ってみましたが、MatコンストラクタはIntPtrをサポートしていないので、Matオブジェクトをどのように構築するのか分かりません。誰も私はこれを行うことができます知っていますか?あなたがコードの一部で私を助けることができるなら、それは最高でしょう。ありがとう。BitmapオブジェクトをMatオブジェクト(opencv)に変換するにはどうすればよいですか?

+0

あなたは見たことがあり、[この](http://docs.opencv.org/java/2.4.9/org/opencv/android/私のコードをチェックしてくださいUtils.html) –

答えて

0

それを行うための簡単な方法は次のとおりです。

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace System; 
using namespace System::Drawing; 

int main(array<System::String ^> ^args) { 
    Bitmap^ img = gcnew Bitmap(10, 10,  System::Drawing::Imaging::PixelFormat::Format24bppRgb); 
    // or: Bitmap^ img = gcnew Bitmap("input_image_file_name"); 

    System::Drawing::Rectangle blank = System::Drawing::Rectangle(0, 0, img->Width, img->Height); 
    System::Drawing::Imaging::BitmapData^ bmpdata = img->LockBits(blank, System::Drawing::Imaging::ImageLockMode::ReadWrite,  System::Drawing::Imaging::PixelFormat::Format24bppRgb); 
    cv::Mat cv_img(cv::Size(img->Width, img->Height), CV_8UC3, bmpdata->Scan0.ToPointer(), cv::Mat::AUTO_STEP); 
    img->UnlockBits(bmpdata); 

    cv::imwrite("image.png", cv_img); 
    return 0; 
} 

ところで、あなたがC++/CLIを使用して作業している問題に言及する価値があります。

1

ありがとうございました! 私はそれを行う別の方法を見つけました。 C#:

[DllImport("addborders.dll", CallingConvention = CallingConvention.Cdecl)] 
    public static extern int main(IntPtr pointer, uint height,uint width); 




unsafe 
     { 
      fixed (byte* p = ImageToByte(img)) 
      { 
       var pct = (IntPtr) p; 
       x = main(pct, (uint)img.Height, (uint)img.Width); 

      } 
      textBox1.Text = x.ToString(); 

public static byte[] ImageToByte(Image img) 
    { 
     ImageConverter converter = new ImageConverter(); 
     return (byte[])converter.ConvertTo(img, typeof(byte[])); 
    } 

C++

extern "C" 
{ 
__declspec(dllexport) 
int main(unsigned char* image,unsigned int height,unsigned int width) 
{ 

    cv::Mat img = cv::Mat(height, width, CV_8UC1, image); 
} 
} 
関連する問題