OpenCvSharp函数:CopyMakeBorder边框外推

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();
}

OpenCvSharp函数示例(目录)

猜你喜欢

转载自blog.csdn.net/TyroneKing/article/details/129796851
今日推荐