#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(){
Mat img = imread("D://图片//5.jpg");
if (!img.data)
return -1;
Mat result = img.clone();
result.convertTo(result, CV_32F);
Point center(img.cols / 2, img.rows / 2);
float R, angle;
int num;
cout << "请输入模糊度:" << endl;
cin >> num;
for (int i = 0; i < img.rows; i++) {
float *p = result.ptr<float>(i);
for (int j = 0; j < img.cols; j++) {
int new_x = 0, new_y = 0;
float t0 = 0, t1 = 0, t2 = 0;
R = sqrt((j - center.x)*(j - center.x) + (i - center.y)*(i - center.y));
angle = atan2(float(i - center.y), float(j - center.x));
for (int k = 0; k < num; k++) {
//angle = angle + 0.01; //加上就是旋转模糊
float tem = R - k > 0 ? R-k : 0;
new_x = tem*cos(angle) + center.x;
new_y = tem*sin(angle) + center.y;
if (new_x < 0)
new_x = 0;
if (new_x > img.cols - 1)
new_x = img.cols - 1;
if (new_y < 0)
new_y = 0;
if (new_y > img.rows - 1)
new_y = img.rows - 1;
t0 = t0 + img.at<Vec3b>(new_y, new_x)[0];
t1 = t1 + img.at<Vec3b>(new_y, new_x)[1];
t2 = t2 + img.at<Vec3b>(new_y, new_x)[2];
}
p[j * 3 + 0] = t0 / num;
p[j * 3 + 1] = t1 / num;
p[j * 3 + 2] = t2 / num;
}
}
result.convertTo(result, CV_8U);
imshow("result", result);
waitKey(0);
destroyAllWindows;
return 0;
}