gpt4 book ai didi

c# - 如何在 OpenCVSharp 代码中使用新的 C++ 样式 API?

转载 作者:太空狗 更新时间:2023-10-29 20:38:54 35 4
gpt4 key购买 nike

我正在使用 OpenCVSharp,但目前我的一半代码在 C 中,另一半在 C++ API 中,我正在尝试将其全部移植到 C++ 版本以避免弃用的 API 以及避免加载图像两次(共享 Mat 而不是每个图像有一个 Mat 和一个 CvMat)

这是我的有效代码:

            CvMat distortion = new CvMat(8, 1, MatrixType.F64C1);
distortion[0, 0] = camera.CameraConfig.k1;
distortion[1, 0] = camera.CameraConfig.k2;
distortion[2, 0] = camera.CameraConfig.p1;
distortion[3, 0] = camera.CameraConfig.p2;
distortion[4, 0] = camera.CameraConfig.k3;
distortion[5, 0] = 0;
distortion[6, 0] = 0;
distortion[7, 0] = 0;

CvMat intrinsic = new CvMat(3, 3, MatrixType.F32C1);
intrinsic[0, 0] = camera.CameraConfig.fx;
intrinsic[0, 1] = camera.CameraConfig.skew;
intrinsic[0, 2] = camera.CameraConfig.cx;
intrinsic[1, 0] = 0;
intrinsic[1, 1] = camera.CameraConfig.fy;
intrinsic[1, 2] = camera.CameraConfig.cy;
intrinsic[2, 0] = 0;
intrinsic[2, 1] = 0;
intrinsic[2, 2] = 1;
Cv.Undistort2(camera.SourceImage, newSourceImage,intrinsic,distortion);

代码(在我输入时似乎是一个明显的端口)不起作用(我最终得到了场景中存在的一种颜色的单色图像):

            Mat distortion = new Mat(8, 1, MatType.CV_64FC1);
distortion.Set(0, 0, camera.CameraConfig.k1);
distortion.Set(1, 0, camera.CameraConfig.k2);
distortion.Set(2, 0, camera.CameraConfig.p1);
distortion.Set(3, 0, camera.CameraConfig.p2);
distortion.Set(4, 0, camera.CameraConfig.k3);
distortion.Set(5, 0, 0);
distortion.Set(6, 0, 0);
distortion.Set(7, 0, 0);

Mat intrinsic = new Mat(3, 3, MatType.CV_32FC1);
intrinsic.Set(0, 0, camera.CameraConfig.fx);
intrinsic.Set(0, 1, camera.CameraConfig.skew);
intrinsic.Set(0, 2, camera.CameraConfig.cx);
intrinsic.Set(1, 0, 0);
intrinsic.Set(1, 1, camera.CameraConfig.fy);
intrinsic.Set(1, 2, camera.CameraConfig.cy);
intrinsic.Set(2, 0, 0);
intrinsic.Set(2, 1, 0);
intrinsic.Set(2, 2, 1);
var newSourceImage = camera.SourceImage.Undistort(intrinsic, distortion);

我是否错误地设置了值?移植不是那么简单吗?

最佳答案

它看起来像是您的 camera.SourceImagenewSourceImage 的区别。在您的第一个代码段中,您将 newSourceImage 分配到范围之外,因此我假设您可以执行以下操作:

newSourceImage = new Mat(new Size(...), MatType.CV_8UC3)

但在您的第二个片段中,您将其创建为 var newSourceImage = ...。所以,看起来“undistort”本身决定了你的 Mat 类型并且做错了。

你能展示所有的初始化吗?

关于c# - 如何在 OpenCVSharp 代码中使用新的 C++ 样式 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32870747/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com