我有6个摄像机(60°水平和垂直视野),它们具有相同的中心,向外看,水平旋转30 °。我将图像投影到一个球体上,摄像机位于球体的中心,见下图。
我将图像拼接在一起,接近opencv的图表,但是因为我知道摄像机的方向,所以我跳过了“配准”部分,(目前)省略了图像的混合。
我的问题是,SeamFinder返回的遮罩是无意义的。我认为它应该工作,因为如果我在模拟中使用NoSeamfinder
,结果看起来不错,但我尝试了OpenCV提供的每一个其他SeamFinder,结果如下所示:
我已经使用opencv的stitching_detailed. cpp示例来设置管道,但我不知道问题出在哪里。我想可能是因为我在模拟中工作,图像中的梯度太尖锐而无法处理,所以我应用了高斯模糊,这没有改变任何东西。
我有下面的一些代码片段,可以根据需要发布更多,但我想避免只是倾倒在这里的整个负载。
我在代码中使用cv::Mat
,并将其转换为cv::UMat
以用于SeamFinder。
std::vector<cv::Mat> warped_images_mat; // the single images are warped according to the sphere
std::vector<cv::UMat> warped_images_umat;
std::vector<cv::Mat> warped_masks_mat; // Masks of the warped images within the sphere image
std::vector<cv::UMat> warped_masks_umat;
std::vector<cv::Mat> warped_masks_fixed_mat; // These masks are calculated once and used to refresh the masks for the SeamFinder
std::vector<cv::UMat> warped_masks_fixed_umat;
std::vector<cv::Point> corners; // position of the imgs and masks in the sphere image
cv::Ptr<cv::detail::SeamFinder> seam_finder = cv::makePtr<cv::detail::GraphCutSeamFinder>(cv::detail::GraphCutSeamFinderBase::COST_COLOR_GRAD);
// within the ROS2 callback:
this->warped_masks_umat.clear(); // clear the old masks
for(size_t cam_idx = 0; cam_idx < 6; cam_idx++){
int cols = this->warped_images_mat.at(cam_idx).cols;
int rows = this->warped_images_mat.at(cam_idx).rows;
// std::cout << "rows: " << rows << "; cols: " << cols << std::endl;
for (int col = 0; col < cols; col++)
for (int row = 0; row < rows; row++)
if (this->warped_masks_fixed_mat.at(cam_idx).at<u_char>(row, col) != 0)
// code to refresh warped image
this->warped_images_mat.at(cam_idx).getUMat(cv::ACCESS_RW).convertTo(this->warped_images_umat.at(cam_idx), CV_32F);
this->warped_masks_umat.push_back(this->warped_masks_fixed_umat.at(cam_idx).clone());
}
seam_finder->find(this->warped_images_umat, this->corners, this->warped_masks_umat);
1条答案
按热度按时间ghg1uchk1#
我把opencv的符号弄混了。
.x
和cv::Point
的.y
被交换了。它像这样刷新传入的图像,但对SeamFinder
来说是错误的。当我试图从我得到的评论中复制一个例子时,我注意到了这一点,并注意到面具中有一个独特的形状。它现在也可以用于完整的面具,而不会裁剪任何东西。