纯c++实现opencv的cv::copyMakeBorder
时间: 2024-01-29 10:46:43 浏览: 157
cv::copyMakeBorder函数是OpenCV中的一个函数,用于在图像的边缘添加边框。纯C++实现该函数需要以下步骤:
1. 定义一个新的图像,大小为原图像加上上、下、左、右四个方向的边框大小。
2. 将原图像复制到新图像中间的部分。
3. 对于上、下、左、右四个边框,分别使用cv::copyTo函数将原图像的一部分复制到新图像的对应位置。
以下是一个简单的实现示例:
```cpp
void copyMakeBorder(const cv::Mat& src, cv::Mat& dst, int top, int bottom, int left, int right, int borderType, const cv::Scalar& value)
{
int srcRows = src.rows;
int srcCols = src.cols;
int dstRows = srcRows + top + bottom;
int dstCols = srcCols + left + right;
dst.create(dstRows, dstCols, src.type());
// 复制原图像到新图像中间
src.copyTo(dst(cv::Rect(left, top, srcCols, srcRows)));
// 添加上下左右四个边框
if (top > 0) {
cv::Mat roi = dst(cv::Rect(0, 0, dstCols, top));
cv::Mat srcRoi = src(cv::Rect(0, 0, srcCols, top));
cv::copyTo(srcRoi, roi);
}
if (bottom > 0) {
cv::Mat roi = dst(cv::Rect(0, dstRows - bottom, dstCols, bottom));
cv::Mat srcRoi = src(cv::Rect(0, srcRows - bottom, srcCols, bottom));
cv::copyTo(srcRoi, roi);
}
if (left > 0) {
cv::Mat roi = dst(cv::Rect(0, 0, left, dstRows));
cv::Mat srcRoi = src(cv::Rect(0, 0, left, srcRows));
cv::copyTo(srcRoi, roi);
}
if (right > 0) {
cv::Mat roi = dst(cv::Rect(dstCols - right, 0, right, dstRows));
cv::Mat srcRoi = src(cv::Rect(srcCols - right, 0, right, srcRows));
cv::copyTo(srcRoi, roi);
}
}
```
其中,参数说明如下:
- src:原图像
- dst:目标图像,将原图像加上边框后的结果
- top、bottom、left、right:上、下、左、右四个方向的边框大小
- borderType:边框类型,可以选择BORDER_CONSTANT、BORDER_REPLICATE等
- value:当使用BORDER_CONSTANT边框类型时,填充的颜色值
阅读全文