2

c# でいくつかの openCV Ml 関数を使用しようとしていますが、教師が許可しないため emugcv を使用したくないので、p/invoke を使用してこの 2 行のコードをマーシャリングしようとしています。(ああ、通常の dll または d.dll を使用する必要がありますか??) そして、呼び出し規約を使用する必要がありますか??

   CVAPI(CvMat*)  cvCreateMat( int rows, int cols, int type );//header def
    CvMat * rowtest = cvCreateMat(1,5,CV_32FC1);

私が持っているこれのために

[DllImportAttribute("opencv_ml242.dll.dll", EntryPoint="cvCreateMat")]
public static extern  IntPtr cvCreateMat(int dims, const ref int sizes, int type);

   #define CV_MAT_ELEM( mat, elemtype, row, col )           \
(*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))

   #define CV_MAT_ELEM_PTR_FAST( mat, row, col, pix_size )  \
(assert( (unsigned)(row) < (unsigned)(mat).rows &&   \
         (unsigned)(col) < (unsigned)(mat).cols ),   \
 (mat).data.ptr + (size_t)(mat).step*(row) + (pix_size)*(col))

この行(上記のヘッダー)を実行するのに問題があります。誰か助けてくれませんか?ありがとうございました!

   CV_MAT_ELEM(*rowtest,float,0,0)

編集: cv_mat_elem の何かを見つけました

   public static void CV_MAT_ELEM(ref Image<Gray, float> mat, Type elemtype, int row, int col, float val)
    {
        MCvMat cvMat = new MCvMat();
        cvMat.data = mat;

        CV_MAT_ELEM_PTR_FAST(ref cvMat, row, col, sizeof(float), val);

    public static void CV_MAT_ELEM_PTR_FAST(ref MCvMat mat, int row, int col, int pix_size, float val)
    {
        unsafe
        {
            int sz = sizeof(float);
            if (row < mat.rows)
            {
                if (col < mat.cols)
                {
                   IntPtr x = new IntPtr(&mat.data + sz * mat.step * row + sz * col);
                }
            }
        }        }

編集: opencv 関数で DLL を使用して解決しました。パフォーマンスが低下しないことを願っています。

4

1 に答える 1