Код: Выделить всё
OpenCV: d == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0)Я тщательно проверил форму и тип всех входов. Вот моя полная настройка: < /p>
emgu.cv Версия: 4.11.0 < /p>
Язык: C#< /p>
Платформа: .net (winforms) < /p>
(cshp) < /p>
< /p> < /p>
Mat rVec = new Mat();
Mat tVec = new Mat();
// Intrinsic parameters (from calibration)
Matrix camMatrix = K; // 3x3, Cv64F
Matrix distCoeffs = D; // 1x4, Cv64F
// 3D points in meters
var coords = new List
{
new float[] { 0.1f, 0.2f, 0.5f },
new float[] { 0.2f, 0.1f, 0.5f },
new float[] { 0.3f, 0.1f, 0.5f },
new float[] { 0.4f, 0.1f, 0.5f },
new float[] { 0.5f, 0.1f, 0.5f },
new float[] { 0.6f, 0.1f, 0.5f }
};
var coordsArray = coords.Select(p => new MCvPoint3D32f(p[0], p[1], p[2])).ToArray();
// Corresponding 2D image points
List
pointsF = new List
{
new PointF(1234f, 567f),
new PointF(1250f, 570f),
new PointF(1270f, 575f),
new PointF(1290f, 580f),
new PointF(1305f, 583f),
new PointF(1320f, 586f)
};
// SolvePnP
CvInvoke.SolvePnP(
coordsArray,
pointsF.ToArray(),
camMatrix,
distCoeffs,
rVec,
tVec
);
// Convert translation to meters if needed
// tVec.ConvertTo(tVec, tVec.Depth, 1.0 / 1000.0); // optional depending on units
// Project 3D points
var proj_obj = new Emgu.CV.Util.VectorOfPointF();
CvInvoke.ProjectPoints(
coordsArray,
rVec,
tVec,
camMatrix,
distCoeffs,
proj_obj // this throws the error
);
< /code>
coordsarray.length == 6 < /p>
rVEC: 3x1, тип CV64F, 1 канал < /p>
TVEC: 3x1, тип CV64F, 1 канал < /p>
cammaTrix: 3x3, 1 канал < /p>
cammatrix: 3x3, 1 канал < /p>
3x1, type cv64f, 1 канал < /p>
Канал
e.g.:
[2416, 0, 960]
[ 0,2416, 540]
[ 0, 0, 1]
< /code>
distcoeffs: 1x4, type cv64f, 1 канал < /p>
Даже при все входные размеры и типы, кажущиеся правильными, я все еще получаю эту ошибку с точки Project. Ошибка, даже когда все измерения кажутся правильными?
Есть ли какие -нибудь краевые случаи или известные проблемы, которые мне могут отсутствовать? Удача.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... es0-1-size