径向梯度,找一个点为中心,其它点到该中心的距离就是变换的比例尺度。
x,y是中心位置,scale是比例尺度。
- #include "stdafx.h"
- #include <cv.h>
- #include <cxcore.h>
- #include <highgui.h>
- #include <cmath>
- using namespace std;
- using namespace cv;
- int main(int argc ,char ** argv)
- {
- //cvPoint center;
- double scale=-3;
- IplImage * image=cvLoadImage(argv[1]);
- if (!image)
- return -1;
- int x = image->width/4;
- int y = image->height/4;
- for (int i=0;i<image->height;i++)
- {
- for (int j=0;j<image->width;j++)
- {
- double dx=(double)(j-x)/x;
- double dy=(double)(i-y)/y;
- double weight=exp((dx*dx+dy*dy)*scale);
- uchar* ptr=&CV_IMAGE_ELEM(image,uchar,i,j*3);
- ptr[0]=cvRound(ptr[0]*weight);
- ptr[1]=cvRound(ptr[1]*weight);
- ptr[2]=cvRound(ptr[2]*weight);
- }
- }
- cvNamedWindow("test",1);
- cvShowImage("test",image);
- cvWaitKey(0);
- return 0;
- }
改变比例尺度scale=-8,x,y还是原图中心,如图所示:
改变比例尺度scale=-8,x,y还是原图1/4位置,如图所示:
阅读(4390) | 评论(0) | 转发(0) |