无法通过OpenCV在c++中缝合图像
Unable to stitch images via OpenCV in C++
我需要在c++中使用OpenCV缝合一些图像,因此我编写了以下代码:
#include <opencv2/opencv.hpp>
#include <opencv2/stitching.hpp>
#include <cstdio>
#include <vector>
void main()
{
std::vector<cv::Mat> vImg;
cv::Mat rImg;
vImg.push_back(cv::imread("./stitching_img/S1.png"));
vImg.push_back(cv::imread("./stitching_img/S2.png"));
vImg.push_back(cv::imread("./stitching_img/S3.png"));
cv::Stitcher stitcher = cv::Stitcher::createDefault();
unsigned long AAtime = 0, BBtime = 0;
AAtime = cv::getTickCount();
cv::Stitcher::Status status = stitcher.stitch(vImg, rImg);
BBtime = cv::getTickCount();
printf("%.2lf sec n", (BBtime - AAtime) / cv::getTickFrequency());
if (cv::Stitcher::OK == status)
cv::imshow("Stitching Result", rImg);
else
std::printf("Stitching fail.");
cv::waitKey(0);
}
不幸的是,它总是说"拼接失败"在以下文件- https://i.stack.imgur.com/5tqvD.jpg当它工作在这些文件- https://i.stack.imgur.com/jMtbC.jpg
我做错了什么?我该怎么修理它?
cv::Stitchers
的工作原理是找到单独图像中的共同特征,并使用这些特征来找出图像适合在一起的位置。在拼接工作的样本中,你可以发现很多重叠:蓝色屋顶,马路对面建筑物的特征等。
在你失败的集合中,没有重叠,所以算法无法找出如何将它们组合在一起。似乎你可以通过把它们放在一起来"缝合"这些图像。为此,您可以使用以下答案所描述的hconcat
: https://stackoverflow.com/a/20079134/1737727
有一种非常简单的方法可以并排显示两个图像。下面的函数可以使用opencv提供的。
Mat image1, image2;
hconcat(image1,image2,image1);//Syntax->
hconcat(source1,source2,destination);
这个函数还可以用来将一组列从一个图像复制到另一个图像。
Mat image;
Mat columns=image.colRange(20,30);
hconcat(image,columns,image);
vconcat是一个类似于垂直拼接图像的函数。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 使用 CUDA 和纹理进行图像减法