您的位置:首页 > 运维架构

高反差保留滤镜学习OpenCV:滤镜系列(11)——高反差保留

2013-06-24 20:52 309 查看
这几周笔者几篇文章介绍了改高反差保留滤镜的文章. 关联文章的地址

高反差保留就是高通滤波

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);
}

每日一道理

“一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!

原图:






高反差保留:






高通滤波器:



文章结束给大家分享下程序员的一些笑话语录:

刹车失灵

有一个物理学家,工程师和一个程序员驾驶着一辆汽车行驶在阿尔卑斯山脉 上,在下山的时候,忽然,汽车的刹车失灵了,汽车无法控制地向下冲去, 眼看前面就是一个悬崖峭壁,但是很幸运的是在这个悬崖的前面有一些小树 让他们的汽车停了下来, 而没有掉下山去。 三个惊魂未定地从车里爬了出来。

物理学家说, “我觉得我们应该建立一个模型来模拟在下山过程中刹车片在高 温情况下失灵的情形”。

工程师说, “我在车的后备厢来有个扳手, 要不我们把车拆开看看到底是什么 原因”。

程序员说,“为什么我们不找个相同的车再来一次以重现这个问题呢?”

---------------------------------
原创文章 By
高反差保留和滤镜
---------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: