學習OpenCV:濾鏡系列(2)——擴張&擠壓
【原文:http://blog.csdn.net/yangtrees/article/details/9095731】
==============================================
版權所有:小熊不去實驗室CSDN部落格
==============================================
原理:凸透鏡效果演算法
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- 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<heigh; y++)
- {
- uchar *img1_p = img1.ptr<uchar>(y);
- for (int x=0; x<width; x++)
- {
- int dis = norm(Point(x,y)-center);
- if (dis<R1)
- {
- int newX = (x-center.x)*dis/R1+center.x;
- int newY = (y-center.y)*dis/R1+center.y;
- img1_p[3*x]=src.at<uchar>(newY,newX*3);
- img1_p[3*x+1]=src.at<uchar>(newY,newX*3+1);
- img1_p[3*x+2]=src.at<uchar>(newY,newX*3+2);
- }
- }
- }
- //【2】擠壓
- for (int y=0; y<heigh; y++)
- {
- uchar *img2_p = img2.ptr<uchar>(y);
- for (int x=0; x<width; 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<0) newX=0;
- else if(newX>=width) newX=width-1;
- if(newY<0) newY=0;
- else if(newY>=heigh) newY=heigh-1;
- img2_p[3*x]=src.at<uchar>(newY,newX*3);
- img2_p[3*x+1]=src.at<uchar>(newY,newX*3+1);
- img2_p[3*x+2]=src.at<uchar>(newY,newX*3+2);
- }
- }
- imshow("src",src);
- imshow("img1",img1);
- imshow("img2",img2);
- waitKey();
- imwrite("D:/img/擴張.jpg",img1);
- imwrite("D:/img/擠壓.jpg",img2);
- }
原圖:
擴張:
擠壓:
相關文章
- 學習OpenCV:濾鏡系列(9)——擴散(毛玻璃)OpenCV
- 學習OpenCV:濾鏡系列(6)——風OpenCV
- 學習OpenCV:濾鏡系列(8)——素描OpenCV
- 學習OpenCV:濾鏡系列(1)—— 雕刻&浮雕OpenCV
- 學習OpenCV:濾鏡系列(4)——波浪:正弦OpenCV
- 學習OpenCV:濾鏡系列(7)——漩渦OpenCV
- 學習OpenCV:濾鏡系列(14)——載入選區OpenCV
- 學習OpenCV:濾鏡系列(15)——羽化(模糊邊緣)OpenCV
- 學習OpenCV:濾鏡系列(12)——計算模式(強光)OpenCV模式
- 學習OpenCV:濾鏡系列(5)——徑向模糊:縮放&旋轉OpenCV
- 學習OpenCV:濾鏡系列(13)——計算模式演算法集合OpenCV模式演算法
- 學習OpenCV:濾鏡系列(11)——高反差保留 (6.30修改版)OpenCV
- 學習OpenCV:濾鏡系列(10)——懷舊色 & 連環畫 & 熔鑄 & 冰凍OpenCV
- 【OpenCV學習】影象卷積濾波OpenCV卷積
- Canvas系列之一——濾鏡效果Canvas
- 影像濾鏡藝術----Brannan濾鏡NaN
- Python-OpenCV 處理影象(二):濾鏡和影象運算PythonOpenCV
- 學習擴張包的開發到釋出
- opencv 學習OpenCV
- OpenCV學習OpenCV
- matlab練習程式(Sepia Tone濾鏡)Matlab
- OpenCV計算機視覺學習(4)——影像平滑處理(均值濾波,高斯濾波,中值濾波,雙邊濾波)OpenCV計算機視覺
- SVG <filter> 濾鏡SVGFilter
- CSS濾鏡(filter)CSSFilter
- GPUImage濾鏡列表GPUUI
- 美顏濾鏡SDK的智慧濾鏡與傳統顏色濾鏡有什麼區別?
- 【opencv實戰】哈哈鏡OpenCV
- 學習OpenCV——SVMOpenCV
- angular學習筆記(十六) -- 過濾器(2)Angular筆記過濾器
- OpenCV-Java版學習(2.影像入門)OpenCVJava
- 【CSS濾鏡的使用】CSS
- OpenCV計算機視覺學習(10)——影像變換(傅立葉變換,高通濾波,低通濾波)OpenCV計算機視覺
- 美顏SDK濾鏡功能有哪些常用的濾鏡演算法演算法
- OpenCV 線性濾波OpenCV
- 學習OpenCV:hu矩OpenCV
- 學習OpenCV:骨架提取OpenCV
- 城市擴張與土地資源:壓力之下尋平衡之道
- Opencv3 python學習2——視訊基礎OpenCVPython