OpenCV: могут ли projectPoints возвращать отрицательные значения?

Я использую cv :: projectPoints, чтобы получить соответствующие пиксели вектора трехмерных точек.

Точки все рядом друг с другом.

Проблема в том, что для некоторых точек я получаю правильные координаты пикселей, а для других я получаю странные отрицательные значения, такие как -22599 …

Это нормально, что cv :: projectPoints возвращают отрицательные значения, или это ошибка в моем коде?

void SingleCameraTriangulator::projectPointsToImage2(const std::vector< cv::Vec3d >& pointsGroup, const double scale, std::vector< Pixel >& pixels)
{
cv::Vec3d
t2, r2;

decomposeTransformation(*g_12_, r2, t2);

cv::Mat imagePoints2;

cv::projectPoints(pointsGroup, r2, t2, *camera_matrix_, *distortion_coefficients_, imagePoints2);

for (std::size_t i = 0; i < imagePoints2.rows; i++)
{
cv::Vec2d pixel = imagePoints2.at<cv::Vec2d>(i);
Pixel p;
p.x_ = pixel[0];
p.y_ = pixel[1];
if ( (p.x_ < 0) || (p.x_ > ((1 / scale) * img_1_->cols)) || (p.y_ < 0) || (p.y_ > ((1/scale) * img_1_->rows)))
{
cv::Vec3d point = pointsGroup[i];
std::cout << point << " - " << pixel << " - " << pixel*scale << "problema" << std::endl;
}
p.i_ = getBilinearInterpPix32f(*img_2_, scale * p.x_, scale * p.y_);

pixels.push_back(p);
}
}

Заранее благодарю за любые предложения.

1

Решение

reprojectImageTo3D (вы используете его для получения 3D-точек?) выдает большие координаты z (10000) для точек выброса, поэтому я думаю, что ваша проблема здесь.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]