學習OpenCV:濾鏡系列(4)——波浪:正弦

查志強發表於2014-11-25

【原文:http://blog.csdn.net/yangtrees/article/details/9101185

==============================================

版權所有:小熊不去實驗室CSDN部落格

==============================================


  1. #include <math.h>  
  2. #include <opencv/cv.h>  
  3. #include <opencv/highgui.h>  
  4.   
  5. using namespace cv;  
  6. using namespace std;  
  7.   
  8. double angle;  
  9. int deltaI=10;  //波浪週期;  
  10. int A=10;       //波浪振幅;  
  11. Mat src,img;  
  12.   
  13. static void onTrackbar(intvoid*)  
  14. {  
  15.     int width=src.cols;  
  16.     int heigh=src.rows;  
  17.     angle = 0.0;  
  18.       
  19.     for (int y=0; y<heigh; y++)  
  20.     {  
  21.         int changeX = A*sin(angle);  
  22.         uchar *srcP = src.ptr<uchar>(y);  
  23.         uchar *imgP = img.ptr<uchar>(y);  
  24.         for (int x=0; x<width; x++)  
  25.         {  
  26.             if(changeX+x<width && changeX+x>0)        //正弦分佈(-1,1)  
  27.             {  
  28.                 imgP[3*x]=srcP[3*(x+changeX)];  
  29.                 imgP[3*x+1]=srcP[3*(x+changeX)+1];  
  30.                 imgP[3*x+2]=srcP[3*(x+changeX)+2];  
  31.             }  
  32.             //每行開始和結束的空白區;  
  33.             else if(x<=changeX)         
  34.             {  
  35.                 imgP[3*x]=srcP[0];  
  36.                 imgP[3*x+1]=srcP[1];  
  37.                 imgP[3*x+2]=srcP[2];  
  38.             }  
  39.             else if (x>=width-changeX)  
  40.             {  
  41.                 imgP[3*x]=srcP[3*(width-1)];  
  42.                 imgP[3*x+1]=srcP[3*(width-1)+1];  
  43.                 imgP[3*x+2]=srcP[3*(width-1)+2];  
  44.             }  
  45.         }  
  46.         angle += ((double)deltaI)/100;  
  47.     }  
  48.     imshow("Waves map",img);  
  49. }  
  50.   
  51.   
  52. int main()  
  53. {  
  54.     src = imread("D:/test4.jpg");  
  55.       
  56.     src.copyTo(img);  
  57.   
  58.     namedWindow("Waves map", 1);  
  59.   
  60.     // create a toolbar  
  61.     createTrackbar("振幅""Waves map", &A, 100, onTrackbar);  
  62.       
  63.     createTrackbar("頻率""Waves map", &deltaI, 100, onTrackbar);  
  64.     // Show the image  
  65.     onTrackbar(0, 0);  
  66.   
  67.     waitKey();  
  68.     imwrite("D:/wave.jpg",img);  
  69.   
  70. }  


原圖:


波浪:


相關文章