學習OpenCV:濾鏡系列(9)——擴散(毛玻璃)

查志強發表於2014-11-25

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

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

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

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


PhotoShop裡的擴散,就相當於毛玻璃的感覺。

原理:用當前點四周一定範圍內任意一點的顏色來替代當前點顏色,最常用的是隨機的採用相鄰點進行替代。


  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.   
  9. int main()  
  10. {  
  11.     Mat src = imread("D:/scene03.jpg",1);  
  12.     int width=src.cols;  
  13.     int heigh=src.rows;  
  14.     RNG rng;  
  15.     Mat img(src.size(),CV_8UC3);  
  16.     for (int y=1; y<heigh-1; y++)  
  17.     {  
  18.         uchar* P0  = src.ptr<uchar>(y);  
  19.         uchar* P1  = img.ptr<uchar>(y);  
  20.         for (int x=1; x<width-1; x++)  
  21.         {  
  22.             int tmp=rng.uniform(0,9);  
  23.             P1[3*x]=src.at<uchar>(y-1+tmp/3,3*(x-1+tmp%3));  
  24.             P1[3*x+1]=src.at<uchar>(y-1+tmp/3,3*(x-1+tmp%3)+1);  
  25.             P1[3*x+2]=src.at<uchar>(y-1+tmp/3,3*(x-1+tmp%3)+2);  
  26.         }  
  27.   
  28.     }  
  29.     imshow("擴散",img);  
  30.     waitKey();  
  31.     imwrite("D:/擴散.jpg",img);  
  32. }  

原圖:



擴散(毛玻璃):


相關文章