學習OpenCV:濾鏡系列(5)——徑向模糊:縮放&旋轉
【原文:http://blog.csdn.net/yangtrees/article/details/9103935】
==============================================
版權所有:小熊不去實驗室CSDN部落格
==============================================
原理來自:Game Render
這效果在鬼泣4中切換場景時見過, 極品飛車12的運動模糊也有這種感覺.
PS裡稱為 徑向模糊->縮放, 還有一種 徑向模糊->旋轉。
縮放的原理:
確定一箇中心點(如0.5, 0.5), 跟當前畫素連一條線. 以當前畫素為中心, 線上上的附近畫素進行取樣, 最後取一下平均值.
同樣,旋轉的原理相似,就是相同半徑的一定鄰域內的均值。
縮放時,半徑變化,旋轉時,角度變化。
使用OpenCV實現
原圖:
徑向模糊->縮放:
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- using namespace std;
- int num=40;//num:均值力度;
- int main()
- {
- Mat src = imread("D:/test3.jpg",1);
- Mat src1u[3];
- split(src,src1u);
- int width=src.cols;
- int heigh=src.rows;
- Mat img;
- src.copyTo(img);
- Point center(width/2,heigh/2);
- for (int y=0; y<heigh; y++)
- {
- uchar *imgP = img.ptr<uchar>(y);
- for (int x=0; x<width; x++)
- {
- int R = norm(Point(x,y)-center);
- double angle = atan2((double)(y-center.y),(double)(x-center.x));
- int tmp0=0,tmp1=0,tmp2=0;
- for (int i=0;i<num;i++) //num:均值力度 ,i為變化幅度;
- {
- int tmpR = (R-i)>0?(R-i):0;
- int newX = tmpR*cos(angle) + center.x;
- int newY = tmpR*sin(angle) + center.y;
- if(newX<0)newX=0;
- if(newX>width-1)newX=width-1;
- if(newY<0)newY=0;
- if(newY>heigh-1)newY=heigh-1;
- tmp0 += src1u[0].at<uchar>(newY,newX);
- tmp1 += src1u[1].at<uchar>(newY,newX);
- tmp2 += src1u[2].at<uchar>(newY,newX);
- }
- imgP[3*x]=(uchar)(tmp0/num);
- imgP[3*x+1]=(uchar)(tmp1/num);
- imgP[3*x+2]=(uchar)(tmp2/num);
- }
- }
- imshow("徑向模糊",img);
- waitKey();
- imwrite("D:/徑向模糊(縮放).jpg",img);
- }
徑向模糊->旋轉:
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- using namespace std;
- int num=20; //均值力度;
- int main()
- {
- Mat src = imread("D:/test3.jpg",1);
- Mat src1u[3];
- split(src,src1u);
- int width=src.cols;
- int heigh=src.rows;
- Mat img;
- src.copyTo(img);
- Point center(width/2,heigh/2);
- for (int y=0; y<heigh; y++)
- {
- uchar *imgP = img.ptr<uchar>(y);
- for (int x=0; x<width; x++)
- {
- int R = norm(Point(x,y)-center);
- double angle = atan2((double)(y-center.y),(double)(x-center.x));
- int tmp0=0,tmp1=0,tmp2=0;
- for (int i=0;i<num;i++) //均值力度;
- {
- angle+=0.01; //0.01控制變化頻率,步長
- int newX = R*cos(angle) + center.x;
- int newY = R*sin(angle) + center.y;
- if(newX<0)newX=0;
- if(newX>width-1)newX=width-1;
- if(newY<0)newY=0;
- if(newY>heigh-1)newY=heigh-1;
- tmp0 += src1u[0].at<uchar>(newY,newX);
- tmp1 += src1u[1].at<uchar>(newY,newX);
- tmp2 += src1u[2].at<uchar>(newY,newX);
- }
- imgP[3*x]=(uchar)(tmp0/num);
- imgP[3*x+1]=(uchar)(tmp1/num);
- imgP[3*x+2]=(uchar)(tmp2/num);
- }
- }
- imshow("徑向模糊",img);
- waitKey();
- imwrite("D:/徑向模糊(旋轉).jpg",img);
- }
原理Reference:
http://blog.csdn.net/xoyojank/article/details/5146297
http://bbs.9ria.com/thread-111831-1-1.html
相關文章
- 學習OpenCV:濾鏡系列(15)——羽化(模糊邊緣)OpenCV
- 學習OpenCV:濾鏡系列(6)——風OpenCV
- 學習OpenCV:濾鏡系列(8)——素描OpenCV
- matlab練習程式(旋轉、徑向模糊)Matlab
- 學習OpenCV:濾鏡系列(1)—— 雕刻&浮雕OpenCV
- 學習OpenCV:濾鏡系列(4)——波浪:正弦OpenCV
- 學習OpenCV:濾鏡系列(7)——漩渦OpenCV
- 【影象演算法】高斯模糊+徑向縮放模糊演算法
- 學習OpenCV:濾鏡系列(2)——擴張&擠壓OpenCV
- 學習OpenCV:濾鏡系列(9)——擴散(毛玻璃)OpenCV
- 學習OpenCV:濾鏡系列(14)——載入選區OpenCV
- 學習OpenCV:濾鏡系列(12)——計算模式(強光)OpenCV模式
- 學習OpenCV:濾鏡系列(13)——計算模式演算法集合OpenCV模式演算法
- 學習OpenCV:濾鏡系列(11)——高反差保留 (6.30修改版)OpenCV
- 學習OpenCV:濾鏡系列(10)——懷舊色 & 連環畫 & 熔鑄 & 冰凍OpenCV
- webgl濾鏡--旋轉的三原色Web
- ARFoundation - 實現物體旋轉, 平移,縮放
- Android 可平移,縮放,旋轉的ImageViewAndroidView
- opencv中自定義的雙線性二次插值的影像旋轉及縮放OpenCV
- CSS3 滑鼠懸浮div旋轉縮放CSSS3
- 【OpenCV學習】影象卷積濾波OpenCV卷積
- 在Delphi中實現圖片的旋轉、縮放 (轉)
- 前端 -- 頁面濾鏡效果及高斯模糊效果前端
- opencv 影像的型別轉換、影像的縮放OpenCV型別
- iOS動畫系列之五:基礎動畫之縮放篇&旋轉篇Swift+OCiOS動畫Swift
- OpenCV(iOS)影象尺寸縮放(14)OpenCViOS
- OpenCV計算機視覺學習(11)——影像空間幾何變換(影像縮放,影像旋轉,影像翻轉,影像平移,仿射變換,映象變換)OpenCV計算機視覺
- 使用RxJava實現ImageView的拖動、旋轉和縮放RxJavaView
- 【Android動畫】之Tween動畫 (漸變、縮放、位移、旋轉)Android動畫
- 修圖調色降噪濾鏡_Nik Collection 5 (濾鏡外掛)_中文Nik 5
- lightroom中文基礎教程:使用徑向漸變濾鏡調整夕陽OOM
- Canvas系列之一——濾鏡效果Canvas
- 影象縮放--插值法(opencv,原理)OpenCV
- Qt 從 QTransform 逆向解出 Translate/Scale/Rotate(平移/縮放/旋轉)分析QTORM
- win10螢幕字型縮放模糊怎麼辦_win10縮放後字型模糊如何解決Win10
- opencv 圖片幾何變換-縮放OpenCV
- 手遊UI互動動作設計研究:縮放、書寫、旋轉UI
- CGAffineTransform二維檢視旋轉、縮放、平移變換詳解ORM