C语言:图像填充之reflection反射填充

C语言:图像填充之reflection反射填充

手撕一个padding reflection

填充方式abcdef->cbabcdefed

cv::Mat paddingUsingReflection(cv::Mat &inputImage, int top, int bot, int left, int right, cv::Mat &outputImage)
{
    outputImage.create(inputImage.rows + top + bot, inputImage.cols + left + right, inputImage.type());
    for (int y = top; y < outputImage.rows - bot; y++) 
    {
        for (int x = left; x < outputImage.cols - right; x++) 
        {
            outputImage.at<uchar>(y, x) = int(inputImage.at<uchar>(y - top, x - left));
        }
    }
    //top
    for (int y = 0; y < top; y++)
    {
        for (int x = left; x < outputImage.cols - right; x++) 
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>(2 * top - y, x));
        }
    }
    //bot
    for (int y = outputImage.rows - bot; y < outputImage.rows; y++) 
    {
        for (int x = left; x < outputImage.cols - right; x++) 
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>((inputImage.rows + bot - 1) * 2 - y, x));
        }
    }
    //left
    for (int y = top; y < outputImage.rows - bot; y++) 
    {
        for (int x = 0; x < left; x++)
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>(y, 2 * left - x));
        }
    }
    //right
    for (int y = top; y < outputImage.rows - bot; y++)
    {
        for (int x = outputImage.cols - right; x < outputImage.cols; x++)
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>(y, (inputImage.cols + right - 1) * 2 - x));
        }
    }
    //left and top
    for (int y = 0; y < top; y++) 
    {
        for (int x = 0; x < left; x++) 
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>(2 * top - y, 2 * left - x));
        }
    }
    //right and top
    for (int y = 0; y < top; y++) 
    {
        for (int x = outputImage.cols - right; x < outputImage.cols; x++)
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>(2 * top - y, (inputImage.cols + right - 1) * 2 - x));
        }
    }
    //left and bot
    for (int y = outputImage.rows - bot; y < outputImage.rows; y++)
    {
        for (int x = 0; x < left; x++) 
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>((inputImage.rows + bot - 1) * 2 - y, 2 * left - x));
        }
    }
    //right and bot
    for (int y = outputImage.rows - bot; y < outputImage.rows; y++) 
    {
        for (int x = outputImage.cols - right; x < outputImage.cols; x++)
        {
            outputImage.at<uchar>(y, x) = int(outputImage.at<uchar>((inputImage.rows + bot - 1) * 2 - y, (inputImage.cols + right - 1) * 2 - x));
        }
    }
    return outputImage;
}

如有错误请指正,欢迎讨论
.
.
.
.
.
.
<<底层小猴的成长日记>>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值