首页 > 解决方案 > 使用 2D 数组初始化 EMGU(非 OpenCV C++)Mat(C#)

问题描述

我知道这个“看起来”像一个重复的问题,但是 - 它没有以我能看到的任何明确的方式得到回答。在 C++ 中,初始化 Mat 的 OpenCv 操作可以这样完成:

    float[,] camera = new float[,] {
                    { 857.483f, 0.0f, 968.06f },
                    { 0.0f, 876.72f, 556.37f },
                    { 0.0f, 0.0f, 1.0f }
                };
    A = Mat(3,3, CV_32FC1, &camera);

请注意,数组是二维的。现在,我想在 EMGU 中完成同样的事情,//使用托管 C#;所以 Mat 构造为:

    Mat _cameraMatrix = new Mat(3, 3, DepthType.Cv64F, 1);
// and a similar 1D Mat:
    Mat _distCoeffs = new Mat(8, 1, DepthType.Cv64F, 1);
// to be passed to the method:
   CvInvoke.Undistort(bkgimage, ndimage, _cameraMatrix, _distCoeffs);

与 cv::Mat 不同,EMGU Mat 的构造函数似乎没有明显的方法来获取 2D“相机”数据。任何人都成功地让这种代码工作?

标签: emgucv

解决方案


根据 EmguCV 文档,有一个构造函数将 IntPr 作为“数据”:参见http://www.emgu.com/wiki/files/3.4.3/document/html/c8424736-2d44-c5d6-212f- 31dedfe6fb95.htm

问题是如何获得该指针。在这里,也许这篇文章会对你有所帮助:

如何在 C# 中从 byte[] 获取 IntPtr

希望这至少能让你开始。


推荐阅读