OpenCV_5径向模糊:缩放&旋转

一,原图:

二,缩放代码&结果:

//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

猜你喜欢

转载自blog.csdn.net/sxlsxl119/article/details/84863642