allow blending sticher to work with grayscale images

This commit is contained in:
2021-07-01 14:06:41 +02:00
parent ddc01bf8d3
commit f4f2dc3507
2 changed files with 15 additions and 5 deletions

View File

@ -223,8 +223,21 @@ cv::Mat simpleStich(const std::vector<RemapedImage>& images)
return out(cv::Rect(topLeft, outputSize)); return out(cv::Rect(topLeft, outputSize));
} }
cv::Mat stich(const std::vector<RemapedImage>& images, bool seamAdjust) cv::Mat stich(std::vector<RemapedImage>& images, bool seamAdjust)
{ {
for(auto& image : images)
assert(image.image.type() == CV_8UC3 || image.image.type() == CV_8UC1);
for(auto& image : images)
{
if(image.image.type() == CV_8UC1)
{
cv::Mat colImage;
cv::cvtColor(image.image, colImage, cv::COLOR_GRAY2BGR);
image.image = colImage;
}
}
std::vector<cv::Mat> masks(images.size()); std::vector<cv::Mat> masks(images.size());
std::vector<cv::Point> corners(images.size()); std::vector<cv::Point> corners(images.size());
std::vector<cv::Size> sizes(images.size()); std::vector<cv::Size> sizes(images.size());
@ -236,7 +249,6 @@ cv::Mat stich(const std::vector<RemapedImage>& images, bool seamAdjust)
sizes[i] = images[i].image.size(); sizes[i] = images[i].image.size();
} }
if(seamAdjust) if(seamAdjust)
{ {
std::vector<cv::UMat> images32f(images.size()); std::vector<cv::UMat> images32f(images.size());
@ -264,9 +276,7 @@ cv::Mat stich(const std::vector<RemapedImage>& images, bool seamAdjust)
mb->setNumBands(5); mb->setNumBands(5);
blender->prepare(corners, sizes); blender->prepare(corners, sizes);
for (size_t i = 0; i < images.size(); i++) for (size_t i = 0; i < images.size(); i++)
{
blender->feed(images[i].image, masks[i], corners[i]); blender->feed(images[i].image, masks[i], corners[i]);
}
cv::Mat result; cv::Mat result;
cv::Mat result_mask; cv::Mat result_mask;
blender->blend(result, result_mask); blender->blend(result, result_mask);

View File

@ -44,5 +44,5 @@ bool createRemapMap(const cv::Mat& image, RemapMap& out, const std::vector<Detec
RemapedImage applyRemap(const cv::Mat& image, const RemapMap &map); RemapedImage applyRemap(const cv::Mat& image, const RemapMap &map);
cv::Mat stich(const std::vector<RemapedImage>& images, bool seamAdjust = false); cv::Mat stich(std::vector<RemapedImage>& images, bool seamAdjust = false);
cv::Mat simpleStich(const std::vector<RemapedImage>& images); cv::Mat simpleStich(const std::vector<RemapedImage>& images);