Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用solvePnP的OpenCV中cvConvertScale中出现异常_C#_Opencv_Opencvsharp - Fatal编程技术网

C# 调用solvePnP的OpenCV中cvConvertScale中出现异常

C# 调用solvePnP的OpenCV中cvConvertScale中出现异常,c#,opencv,opencvsharp,C#,Opencv,Opencvsharp,我试图使用OpenCV中的solvePnP(通过OpenCvSharp),但我遇到了一个我不理解的异常 An unhandled exception of type 'OpenCvSharp.OpenCVException' occurred in OpenCvSharp.dll Additional information: src.size == dst.size && src.channels() == dst.channels() 经过一些搜索,我发现它来自conver

我试图使用OpenCV中的solvePnP(通过OpenCvSharp),但我遇到了一个我不理解的异常

An unhandled exception of type 'OpenCvSharp.OpenCVException' occurred in OpenCvSharp.dll
Additional information: src.size == dst.size && src.channels() == dst.channels()
经过一些搜索,我发现它来自convert.cpp中的cvConvertScale

以下是我如何使用它:

var objectPoints = new OpenCvSharp.CPlusPlus.Point3f[4] { o1, o2, o3, o4 };
var imagePoints = new OpenCvSharp.CPlusPlus.Point2f[4] { i1, i2, i3, i4 };
var intrinsic = new double[3, 3] { { d1, d2, d3 }, { d4, d5, d6}, { d7, d8, d9 } };

double[] rvec, tvec;

OpenCvSharp.CPlusPlus.Cv2.SolvePnP(objectPoints,
                                   imagePoints,
                                   intrinsic,
                                   null, out rvec, out tvec);
如果我正确理解这个异常,这意味着发生了排序转换,并且源矩阵和目标矩阵的大小或通道数不相同。但我的两个点列表大小相同。我的相机矩阵是3x3,应该可以。我不明白


有人能解释一下吗?

我想我发现了这个问题,所以我会把它贴在这里,以防有人发现这个问题

我的相机矩阵似乎没有正确初始化。我不知道为什么,但我没有得到一个3x3矩阵从我的双[3,3]。 因此,我使用OpenCV Mat构造函数初始化它,如下所示:

var intrinsic = new Mat(3, 3, MatType.CV_64F, new double[] { d1, d2, d3, d4, d5, d6, d7, d8, d9 });
现在它开始工作了。。。如果有人知道为什么我的double[3,3]没有制作相应的垫子(3,3),请随意分享