Я пытался создать облако точек из пары исправленных стереоизображений. Сначала я получил карту несоответствия, используя реализацию opencv sgbm. Затем я преобразовал его в облако точек, используя следующий код:
[for (int u=0; u < left.rows; ++u)
{
for (int v=0; v < left.cols; ++v)
{
if(disp.at<int>(u,v)==0)continue;
pcl::PointXYZRGB p;
p.x = v;
p.y = u;
p.z = (left_focalLength * baseLine * 0.01/ disp.at<int>(u,v));
std::cout << p.z << std::endl;
cv::Vec3b bgr(left.at<cv::Vec3b>(u,v));
p.b = bgr\[0\];
p.g = bgr\[1\];
p.r = bgr\[2\];
pc.push_back(p);
}
}][1]
left - левое изображение, disp - изображение несоответствия вывода в cv_16s. Правильно ли мое несоответствие с преобразованием pcl или это проблема со значениями несоответствия?
Я приложил снимок экрана с картой несоответствия, облаком точек и исходным левым изображением.
Спасибо!