这段时间在用OPENCV2实现图像运动模糊图像复原功能,其中需要合成不同模糊长度和模糊角度的运动模糊图像,由于没有直接可用的函数,于是自己编了一个,采用OPENCV2,代码如下:
<pre class="cpp" name="code">void genaratePsf(Mat &psf, double len,double angle)
{
double half=len/2;
double alpha = (angle-floor(angle/ 180) *180) /180* PI;
double cosalpha = cos(alpha);
double sinalpha = sin(alpha);
int xsign;
if (cosalpha < 0)
{
xsign = -1;
}
else
{
if (angle == 90)
{
xsign = 0;
}
else
{
xsign = 1;
}
}
int psfwdt = 1;
int sx = (int)fabs(half*cosalpha + psfwdt*xsign - len*EPS);
int sy = (int)fabs(half*sinalpha + psfwdt - len*EPS);
Mat_<double> psf1(sy, sx, CV_64F);
Mat_<double> psf2(sy * 2, sx * 2, CV_64F);
int row = 2 * sy;
int col = 2 * sx;
/*为减小运算量,先计算一半大小的PSF*/
for (int i = 0; i < sy; i&