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;
}
如有错误请指正,欢迎讨论
.
.
.
.
.
.
<<底层小猴的成长日记>>