您好,欢迎访问一九零五行业门户网

学习OpenCV:滤镜系列(2)扩张&挤压

【原文:http://blog.csdn.net/yangtrees/article/details/9095731】 ============================================== 小熊不去实验室csdn博客 ============================================== 原理:凸透镜效果算法 [cpp] view plaincopyprint? #includem
【原文:http://blog.csdn.net/yangtrees/article/details/9095731】
==============================================
小熊不去实验室csdn博客
==============================================
原理:凸透镜效果算法
[cpp] view plaincopyprint?
#include   #include   #include     using namespace cv;  using namespace std;    int main()  {      mat src = imread(d:/img/face02.jpg,1);      int width = src.cols;      int heigh = src.rows;      point center(width/2,heigh/2);      mat img1(src.size(),cv_8uc3);      mat img2(src.size(),cv_8uc3);      src.copyto(img1);      src.copyto(img2);        //【1】放大      int r1 = sqrtf(width*width+heigh*heigh)/2; //直接关系到放大的力度,与r1成正比;            for (int y=0; y    {          uchar *img1_p = img1.ptr(y);          for (int x=0; x        {              int dis = norm(point(x,y)-center);              if (dis            {                  int newx = (x-center.x)*dis/r1+center.x;                  int newy = (y-center.y)*dis/r1+center.y;                    img1_p[3*x]=src.at(newy,newx*3);                  img1_p[3*x+1]=src.at(newy,newx*3+1);                  img1_p[3*x+2]=src.at(newy,newx*3+2);              }          }      }        //【2】挤压      for (int y=0; y    {          uchar *img2_p = img2.ptr(y);          for (int x=0; x        {              double theta = atan2((double)(y-center.y),(double)(x-center.x));//使用atan出现问题~                  int r2 = sqrtf(norm(point(x,y)-center))*8; //直接关系到挤压的力度,与r2成反比;                            int newx = center.x+(int)(r2*cos(theta));                int newy = center.y+(int)(r2*sin(theta));                if(newx            else if(newx>=width) newx=width-1;              if(newy            else if(newy>=heigh) newy=heigh-1;                                      img2_p[3*x]=src.at(newy,newx*3);              img2_p[3*x+1]=src.at(newy,newx*3+1);              img2_p[3*x+2]=src.at(newy,newx*3+2);          }      }      imshow(src,src);      imshow(img1,img1);      imshow(img2,img2);      waitkey();      imwrite(d:/img/扩张.jpg,img1);      imwrite(d:/img/挤压.jpg,img2);  }  
原图:
扩张:
挤压:
其它类似信息

推荐信息