CopyMakeBorder边框外推
函数说明:根据指定边框外推方式,填充边框。
void CopyMakeBorder(InputArray src,
OutputArray dst,
int top,
int bottom,
int left,
int right,
BorderTypes borderType,
Scalar? value = null)
参数 | 说明 |
---|---|
InputArray src | 源图像 |
OutputArray dst | 输出图像 |
int top | 上边界外推像素 |
int bottom | 下边界外推像素 |
int left | 左边界外推像素 |
int right | 右边界外推像素 |
BorderTypes borderType | 边界外推类型 |
Scalar? value | 当外推类型为Constant时的,填充值 |
BorderTypes各值
值 | 说明 |
---|---|
Constant | 按固定值填充 `iiiiii|abcdefgh|iiiiiii` with some specified `i` |
Replicate | 按边界值重复填充 `aaaaaa|abcdefgh|hhhhhhh` |
Reflect | 反射/镜像填充(从边界像素开始) `fedcba|abcdefgh|hgfedcb` |
Wrap | 按对边图像像素填充 `cdefgh|abcdefgh|abcdefg` |
Reflect101 | 镜像填充(从边界往里一像素开始) `gfedcb|abcdefgh|gfedcba` |
Transparent | CopyMakeBorder函数不支持 `uvwxyz|absdefgh|ijklmno` |
Default | 与Reflect101相同 |
Isolated | 不以原图为基础填充 与Constant相同? |
填充示例
Constant按固定值填充
Replicate按边界像素重复填充
Reflect 反射/镜像填充
Wrap 按对边图像像素填充
Reflect101 镜像填充(从边界往里1像素开始)
Isolated 不以原图为基础填充
源码示例
private void TestBorderTypes(Mat src) {
var bBorderTypes = Enum.GetValues(typeof(BorderTypes));
foreach(BorderTypes b in bBorderTypes) {
try {
//外推宽度
var extend = 100;
using var dst = new Mat();
Cv2.CopyMakeBorder(src, dst, extend, extend, extend, extend, b, Scalar.All(127));
Cv2.Rectangle(dst, new Rect(extend, extend, src.Width, src.Height), Scalar.Red);
Cv2.ImShow($"{b.ToString()}", dst);
}
catch (Exception ex) {
//不支持 Transparent
}
}
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}