Я работаю с картой глубины, полученной из двух изображений (я взял ее из opencv StereoBM), и теперь мне нужно найти в них кластеры. Я решил использовать растущую сегментацию области pcl http://www.pointclouds.org/documentation/tutorials/region_growing_segmentation.php. Я преобразовал cv :: Mat в облако точек после прочтения этой статьи http://blog.martinperis.com/2012/01/3d-reconstruction-with-opencv-and-point.html и теперь у меня есть кластерные индексы. Это для функций здесь https://gist.github.com/Daiver/5586252 Теперь я хочу использовать эти индексы для отображения кластеров по глубине карта из StereoBM (cv :: Mat)
Я пытаюсь это сделать, но результат меня не устраивает
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud; //cloud from depth map and rgb image
std::vector <pcl::PointIndices> clusters;// clusters inices, extracted before
for(int j = 0; j < clusters.size(); j++)
{
cv::Mat to_show = cv::Mat::zeros(288, 384, cv::DataType<uchar>::type);//image has size that equal size of rgb image and depth map
for(int i = 0; i < clusters[j].indices.size(); i++)
{
to_show.data[clusters[j].indices[i]] = 200;// regions in this Mat must be equal with regions from depth map
}
cv::imshow("", to_show);
cv::waitKey();
}
Результат Какой-то кластер Другой кластер
Визуализированное облако
Как я могу проецировать кластеры на cv :: Mat? PS извините за мои ошибки в написании. Английский не на моем родном языке
UPD Я пытался "восстановить" карту глубины, используя циклы, такие как циклы в функции mat_to_cloud
int counter = 0;
cv::Mat to_show = cv::Mat::zeros(288, 384, cv::DataType<uchar>::type);
for(int i = 0; i < cloud->height; i++)
{
for(int j = 0; j < cloud->width; j++)
{
to_show.at<uchar>(i, j) = cloud->at(counter).z;
counter++;
}
}
И еще один порядок циклов int counter = 0; cv :: Mat to_show = cv :: Mat :: zeros (288, 384, cv :: DataType :: type); for (int j = 0; j ‹cloud-> width; j ++) {for (int i = 0; i‹ cloud-> height; i ++) {to_show.at (i, j) = cloud-> at (счетчик) .z; счетчик ++; }}
Я не знаю, почему эти изображения похожи
point-cloud-library
, PCL изначально означает язык команд принтера. - person Oszkar   schedule 23.05.2013