【发布时间】:2020-12-02 05:01:58
【问题描述】:
我有一张扭曲的图像,我在上面使用了Cv2.Undistort() 来纠正它。在此之后,我在图像中找到了一些点。我需要得到扭曲图像中这些点的位置。
我尝试了Cv2.ProjectPoints(),但未能获得合适的坐标。它们超出了图像的范围。
这就是我这样做的方式:
List<float> arr = new List<float>();
foreach (var i in points)
{
arr.Add(i.X);
arr.Add(i.Y);
arr.Add(0);
}
Mat pointArr = new Mat(3, points.Count, MatType.CV_32FC1, arr.ToArray());
float[] rotArr = { 1, 0, 0,
0, 1, 0,
0, 0, 1};
float[] transArr = { 0, 0, 0 };
Mat rot = new Mat(3, 1, MatType.CV_32F, rotArr);
Mat trans = new Mat(3, 1, MatType.CV_32F, transArr);
Cv2.ProjectPoints(pointArr, rot, trans, camMatrix, dist, outputPoints);
List<Point2f> point2Fs = new List<Point2f>();
var lngt = outputPoints.Rows * outputPoints.Cols * outputPoints.Channels();
var matarr = new List<float>();
for (int i = 0; i < outputPoints.Rows; i++)
{
point2Fs.Add(new Point2f(outputPoints.ExtractChannel(0).At<float>(0, i), outputPoints.ExtractChannel(1).At<float>(0, i)));
}
points - 我想在原始图像中找到的未失真图像中的点
有什么建议吗?
谢谢!
【问题讨论】:
-
这能回答你的问题吗? Reverse of OpenCV projectPoints
-
没有。我没有要查找的点的真实世界坐标。我有未失真图像中点的像素坐标。
标签: c# .net opencv computer-vision camera-calibration