J'ai essayé de générer un nuage de points à partir d'une paire d'images stéréo rectifiées. J'ai d'abord obtenu la carte de disparité en utilisant l'implémentation sgbm d'opencv. Ensuite, je l'ai convertie en un nuage de points en utilisant le code suivant,
[for (int u=0; u < left.rows; ++u)
{
for (int v=0; v < left.cols; ++v)
{
if(disp.at(u,v)==0)continue;
pcl::PointXYZRGB p;
p.x = v;
p.y = u;
p.z = (left_focalLength * baseLine * 0.01/ disp.at(u,v));
std::cout << p.z << std::endl;
cv::Vec3b bgr(left.at(u,v));
p.b = bgr\[0\];
p.g = bgr\[1\];
p.r = bgr\[2\];
pc.push_back(p);
}
}][1]
left est l'image de gauche, disp est l'image de disparité de sortie en cv_16s. Ma conversion de disparité en pcl est-elle correcte ou y a-t-il un problème avec les valeurs de disparité?
J'ai inclus une capture d'écran de la carte de disparité, du nuage de points et de l'image originale de gauche.
Merci!