学习OpenCV:滤镜系列(11)——高反差保留 (6.30修改版)
来源:互联网 发布:苹果mac电脑使用教程 编辑:程序博客网 时间:2024/05/11 03:19
==============================================
版权所有:小熊不去实验室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:滤镜系列(11)——高反差保留 (6.30修改版)
- 学习OpenCV:滤镜系列(11)——高反差保留 (6.30修改版)
- PS 滤镜算法原理——高反差保留 (High Pass)
- Photoshop脚本 > 高反差保留滤镜的使用
- Python: PS 滤镜--高反差保留 (High pass)
- 学习OpenCV:滤镜系列(1)—— 雕刻&浮雕
- 学习OpenCV:滤镜系列(2)——扩张&挤压
- 学习OpenCV:滤镜系列(3)——颜色变幻
- 学习OpenCV:滤镜系列(4)——波浪:正弦
- 学习OpenCV:滤镜系列(6)——风
- 学习OpenCV:滤镜系列(7)——漩涡
- 学习OpenCV:滤镜系列(8)——素描
- 学习OpenCV:滤镜系列(14)——载入选区
- 学习OpenCV:滤镜系列(1)—— 雕刻&浮雕
- 学习OpenCV:滤镜系列(2)——扩张&挤压
- 学习OpenCV:滤镜系列(3)——颜色变幻
- 学习OpenCV:滤镜系列(4)——波浪:正弦
- 学习OpenCV:滤镜系列(6)——风
- Sql Server判断数据库、表、存储过程、函数是否存在
- 本文介绍使用OpenCV-Python进行形态学处理
- 自学mysql数据库以及连接java
- xx
- 对字符串进行 匹配,查找,替换,判断。
- 学习OpenCV:滤镜系列(11)——高反差保留 (6.30修改版)
- 希尔排序 C++版本
- MVC教程第四篇:传递表单数据
- 一个字符统计的程序
- MVC教程第五篇:MVC整合Ajax
- 产品终于上线了
- MVC教程第六篇:拦截器
- 将十进制的168转换为二进制
- 小单例有大秘密