一,原图:
二,缩放代码&结果:
//5,径向模糊:缩放&旋转
int num = 10;//num:均值力度;
//缩放
void RadialBlurZoom()
{
Mat src = imread("D:\\test\\26.png");
Mat src1u[3];
split(src, src1u);
int width = src.cols;
int heigh = src.rows;
Mat img;
src.copyTo(img);
Point center(width / 2, heigh / 2);
for (int y = 0; y<heigh; y++)
{
uchar *imgP = img.ptr<uchar>(y);
for (int x = 0; x<width; x++)
{
int R = norm(Point(x, y) - center);
double angle = atan2((double)(y - center.y), (double)(x - center.x));
int tmp0 = 0, tmp1 = 0, tmp2 = 0;
for (int i = 0; i<num; i++) //num:均值力度 ,i为变化幅度;
{
int tmpR = (R - i)>0 ? (R - i) : 0;
int newX = tmpR*cos(angle) + center.x;
int newY = tmpR*sin(angle) + center.y;
if (newX<0)newX = 0;
if (newX>width - 1)newX = width - 1;
if (newY<0)newY = 0;
if (newY>heigh - 1)newY = heigh - 1;
tmp0 += src1u[0].at<uchar>(newY, newX);
tmp1 += src1u[1].at<uchar>(newY, newX);
tmp2 += src1u[2].at<uchar>(newY, newX);
}
imgP[3 * x] = (uchar)(tmp0 / num);
imgP[3 * x + 1] = (uchar)(tmp1 / num);
imgP[3 * x + 2] = (uchar)(tmp2 / num);
}
}
imshow("径向模糊", img);
waitKey();
imwrite("D://径向模糊(缩放).jpg", img);
}
//-----开始------
void COpenCVLearningDlg::OnBnClickedStartButton()
{
RadialBlurZoom();
}
结果:
三,旋转代码&结果:
int num = 20;//num:均值力度;
//旋转
void RadialBluRotate()
{
Mat src = imread("D:\\test\\26.png");
Mat src1u[3];
split(src, src1u);
int width = src.cols;
int heigh = src.rows;
Mat img;
src.copyTo(img);
Point center(width / 2, heigh / 2);
for (int y = 0; y<heigh; y++)
{
uchar *imgP = img.ptr<uchar>(y);
for (int x = 0; x<width; x++)
{
int R = norm(Point(x, y) - center);
double angle = atan2((double)(y - center.y), (double)(x - center.x));
int tmp0 = 0, tmp1 = 0, tmp2 = 0;
for (int i = 0; i<num; i++) //均值力度;
{
angle += 0.01; //0.01控制变化频率,步长
int newX = R*cos(angle) + center.x;
int newY = R*sin(angle) + center.y;
if (newX<0)newX = 0;
if (newX>width - 1)newX = width - 1;
if (newY<0)newY = 0;
if (newY>heigh - 1)newY = heigh - 1;
tmp0 += src1u[0].at<uchar>(newY, newX);
tmp1 += src1u[1].at<uchar>(newY, newX);
tmp2 += src1u[2].at<uchar>(newY, newX);
}
imgP[3 * x] = (uchar)(tmp0 / num);
imgP[3 * x + 1] = (uchar)(tmp1 / num);
imgP[3 * x + 2] = (uchar)(tmp2 / num);
}
}
imshow("径向模糊", img);
waitKey();
imwrite("D://径向模糊(旋转).jpg", img);
}
//-----开始------
void COpenCVLearningDlg::OnBnClickedStartButton()
{
RadialBluRotate();
}
结果:
欢迎扫码关注我的微信公众号
原文地址:https://blog.csdn.net/sangni007/column/info/stylizefliter