opencv图像拼接后有黑边c++
时间: 2023-08-01 16:12:17 浏览: 136
qt+opencv实现的图像拼接(C++)
5星 · 资源好评率100%
出现黑边的原因可能是因为图像拼接后的大小与原始图像大小不一致,导致部分像素没有被填充。解决这个问题的方法是使用cv::copyMakeBorder函数在图像周围添加边框像素,使得拼接后的图像大小与原始图像大小一致。
以下是一个简单的示例代码,演示如何在图像周围添加边框像素:
```
cv::Mat image1 = cv::imread("image1.png");
cv::Mat image2 = cv::imread("image2.png");
// 计算拼接后的图像大小
int width = image1.cols + image2.cols;
int height = std::max(image1.rows, image2.rows);
// 创建一个新的图像,大小为拼接后的图像大小
cv::Mat result(height, width, image1.type());
// 将图像1复制到新图像中
cv::Mat roi = result(cv::Rect(0, 0, image1.cols, image1.rows));
image1.copyTo(roi);
// 将图像2复制到新图像中
roi = result(cv::Rect(image1.cols, 0, image2.cols, image2.rows));
image2.copyTo(roi);
// 添加边框像素
int top = 0;
int bottom = 0;
int left = 0;
int right = 0;
cv::copyMakeBorder(result, result, top, bottom, left, right, cv::BORDER_CONSTANT, cv::Scalar(0));
// 显示拼接后的图像
cv::imshow("Result", result);
cv::waitKey(0);
```
在上面的示例代码中,我们首先计算拼接后的图像大小,然后创建一个新的图像,将图像1和图像2复制到新图像中,并使用cv::copyMakeBorder函数添加边框像素。最后,我们显示拼接后的图像。
阅读全文