这几周笔者几篇文章介绍了改高反差保留滤镜的文章. 关联文章的地址
高反差保留就是高通滤波
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
高反差保留和滤镜
---------------------------------