學習OpenCV:濾鏡系列(11)——高反差保留 (6.30修改版)
【原文:http://blog.csdn.net/yangtrees/article/details/9157749】
==============================================
版權所有:小熊不去實驗室CSDN部落格
==============================================
高反差保留就是高通濾波
r=(pix[x,y]-avg(R))/128
pix[x,y]*r+128*(1-r)
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- using namespace std;
- int R=5;
- int main()
- {
- Mat src = imread("D:/10.jpg",1);
- int width=src.cols;
- int heigh=src.rows;
- Mat img;
- src.copyTo(img);
- Mat avg;
- //GaussianBlur(img,avg,Size(R,R),0.0);
- blur(img,avg,Size(R,R));
- Mat dst(img.size(),CV_8UC3);
- float tmp;
- for (int y=0;y<heigh;y++)
- {
- uchar* imgP=img.ptr<uchar>(y);
- uchar* avgP=avg.ptr<uchar>(y);
- uchar* dstP=dst.ptr<uchar>(y);
- for (int x=0;x<width;x++)
- {
- float r0 = abs((float)imgP[3*x]-(float)avgP[3*x])/128;
- tmp = abs( ((float)imgP[3*x] )*r0 + 128*(1-r0) );
- tmp=tmp>255?255:tmp;
- tmp=tmp<0?0:tmp;
- dstP[3*x]=(uchar)(tmp);
- float r1 = abs((float)imgP[3*x+1]-(float)avgP[3*x+1])/128;
- tmp = (uchar)abs( ((float)imgP[3*x+1])*r1 + 128*(1-r1) );
- tmp=tmp>255?255:tmp;
- tmp=tmp<0?0:tmp;
- dstP[3*x+1]=(uchar)(tmp);
- float r2 = abs((float)imgP[3*x+2]-(float)avgP[3*x+2])/128;
- tmp = (uchar)abs( ((float)imgP[3*x+2])*r2 + 128*(1-r2) );
- tmp=tmp>255?255:tmp;
- tmp=tmp<0?0:tmp;
- dstP[3*x+2]=(uchar)(tmp);
- }
- }
- imshow("high",dst);
- //高通濾波測試
- Mat kern = (Mat_<char>(3,3) << -1, -1, -1,
- -1, 5, -1,
- -1, -1, -1);
- Mat dstF;
- filter2D(img,dstF,img.depth(),kern);
- imshow("kernel",dstF);
- waitKey();
- imwrite("D:/高反差保留.jpg",dst);
- imwrite("D:/高通濾波.jpg",dstF);
- }
高反差保留:
高通濾波器:
修改版 高反差保留 對比PS的效果,更加接近。
r = (pix[x,y]-avg(R))
dst[x,y] = 128+|r|*r/(2*R)
- #include <math.h>
- #include <opencv/cv.h>
- #include <opencv/highgui.h>
- using namespace cv;
- using namespace std;
- int R=11;
- int main()
- {
- Mat src = imread("D:/img/liushishi02.jpg",1);
- imshow("src",src);
- int width=src.cols;
- int heigh=src.rows;
- Mat img;
- src.copyTo(img);
- Mat avg;
- //GaussianBlur(img,avg,Size(R,R),0.0);
- blur(img,avg,Size(R,R));
- Mat dst(img.size(),CV_8UC3);
- float tmp;
- for (int y=0;y<heigh;y++)
- {
- uchar* imgP=img.ptr<uchar>(y);
- uchar* avgP=avg.ptr<uchar>(y);
- uchar* dstP=dst.ptr<uchar>(y);
- for (int x=0;x<width;x++)
- {
- float r0 = ((float)imgP[3*x]-(float)avgP[3*x]);
- tmp = 128+abs(r0)*r0/(2*R);
- tmp=tmp>255?255:tmp;
- tmp=tmp<0?0:tmp;
- dstP[3*x]=(uchar)(tmp);
- float r1 = ((float)imgP[3*x+1]-(float)avgP[3*x+1]);
- tmp = 128+abs(r1)*r1/(2*R);
- tmp=tmp>255?255:tmp;
- tmp=tmp<0?0:tmp;
- dstP[3*x+1]=(uchar)(tmp);
- float r2 = ((float)imgP[3*x+2]-(float)avgP[3*x+2]);
- tmp = 128+abs(r2)*r2/(2*R);
- tmp=tmp>255?255:tmp;
- tmp=tmp<0?0:tmp;
- dstP[3*x+2]=(uchar)(tmp);
- }
- }
- imshow("high",dst);
- //高通濾波測試
- Mat kern = (Mat_<char>(3,3) << 0, -1, 0,
- -1, 5, -1,
- 0, -1, 0);
- Mat dstF;
- filter2D(img,dstF,img.depth(),kern);
- imshow("kernel",dstF);
- waitKey();
- //imwrite("D:/高反差保留.jpg",dst);
- // imwrite("D:/高通濾波.jpg",dstF);
- }
相關文章
- 學習OpenCV:濾鏡系列(6)——風OpenCV
- 學習OpenCV:濾鏡系列(8)——素描OpenCV
- 學習OpenCV:濾鏡系列(1)—— 雕刻&浮雕OpenCV
- 學習OpenCV:濾鏡系列(4)——波浪:正弦OpenCV
- 學習OpenCV:濾鏡系列(7)——漩渦OpenCV
- 學習OpenCV:濾鏡系列(2)——擴張&擠壓OpenCV
- 學習OpenCV:濾鏡系列(9)——擴散(毛玻璃)OpenCV
- 學習OpenCV:濾鏡系列(14)——載入選區OpenCV
- 學習OpenCV:濾鏡系列(15)——羽化(模糊邊緣)OpenCV
- 學習OpenCV:濾鏡系列(12)——計算模式(強光)OpenCV模式
- 學習OpenCV:濾鏡系列(5)——徑向模糊:縮放&旋轉OpenCV
- 學習OpenCV:濾鏡系列(13)——計算模式演算法集合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
- DDGScreenShot —圖片加各種濾鏡高逼格操作
- 美顏濾鏡SDK的智慧濾鏡與傳統顏色濾鏡有什麼區別?
- 【opencv實戰】哈哈鏡OpenCV
- 學習OpenCV——SVMOpenCV
- 【CSS濾鏡的使用】CSS
- OpenCV計算機視覺學習(10)——影像變換(傅立葉變換,高通濾波,低通濾波)OpenCV計算機視覺
- 美顏SDK濾鏡功能有哪些常用的濾鏡演算法演算法
- OpenCV 線性濾波OpenCV
- 學習OpenCV:hu矩OpenCV
- 學習OpenCV:骨架提取OpenCV
- 半小時輕鬆玩轉WebGL濾鏡技術系列(二)Web
- 半小時輕鬆玩轉WebGL濾鏡技術系列(一)Web
- CSS圖片濾鏡灰度CSS
- GPUImage濾鏡之銳化GPUUI