0. 我要做什么OpenCV-python小玩意这个系列半年没有更新了感叹时光荏苒岁月如梭-。今天换个轻松的玩法给一张本地图片套上滤镜。手机修图软件里那些「灰度」「黑白」「锐化」「增强」底层很多就是图像处理里的常规操作。OpenCV也能做而且几行代码就能跑通。所以老规矩今天的目标是用imread读入一张图按数字键切换滤镜预览效果按s还能把当前效果存下来。顺便把几个常用滤镜的原理和实现说一说。1. 滤镜到底是什么滤镜听起来很玄其实就是对每个像素或一块邻域按某种规则重新算一遍颜色。滤镜本质上在干什么常用手段灰度丢掉颜色只留亮度cvtColor黑白灰度后再拉对比度更像「胶片黑白」灰度 CLAHE / 对比度拉伸锐化加强边缘让细节更突出卷积核filter2D增强提亮、拉对比convertScaleAbs/ CLAHE柔化抹平细节高斯模糊反色颜色取反bitwise_not怀旧偏黄棕的复古色颜色矩阵变换《小玩意4》里灰度化是为了预处理今天换个角度——把它当成拍照滤镜来玩。2. 灰度滤镜灰度最熟让我们再回忆一下。彩色图是 BGR 三通道灰度是单通道亮度[Y 0.299R 0.587G 0.114B]graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 预览时转回三通道方便和其他滤镜拼在一起显示gray_bgrcv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)效果如下3. 黑白滤镜比灰度更直接这叫我的世界里没有灰色地带非黑即白很多人把「灰度」和「黑白」混着叫。严格说灰度0~255 连续灰阶偏「技术处理」黑白滤镜往往还要拉对比、压中间调阴影更黑、高光更亮才像手机里的「黑白」一个好用的做法是先转灰度再用CLAHE自适应直方图均衡把局部对比度拉起来。deffilter_bw(frame):graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)clahecv2.createCLAHE(clipLimit2.5,tileGridSize(8,8))bwclahe.apply(gray)returncv2.cvtColor(bw,cv2.COLOR_GRAY2BGR)clipLimit越大对比越猛太猛会像「过曝黑白」。效果如下4. 增强滤镜提亮 拉对比增强不一定非要复杂算法。OpenCV 里最直接的是convertScaleAbsdstcv2.convertScaleAbs(src,alpha1.0,beta0)alpha对比度系数1 变硬朗1 变淡beta亮度偏置正数变亮负数变暗deffilter_enhance(frame,alpha1.4,beta20):returncv2.convertScaleAbs(frame,alphaalpha,betabeta)想精细一点可以只在亮度通道上做 CLAHEdeffilter_enhance_clahe(frame):labcv2.cvtColor(frame,cv2.COLOR_BGR2LAB)l,a,bcv2.split(lab)clahecv2.createCLAHE(clipLimit2.0,tileGridSize(8,8))l2clahe.apply(l)lab2cv2.merge([l2,a,b])returncv2.cvtColor(lab2,cv2.COLOR_LAB2BGR)效果如下5. 锐化滤镜边缘更哇塞锐化的经典做法是用卷积核强调中心像素、削弱邻居等价于「原图 边缘」。常用 3×3 锐化核0 -1 0 -1 5 -1 0 -1 0中心是 5四周是 -1加起来还是 1整体亮度大致不变但边缘会被放大。deffilter_sharpen(frame):kernelnp.array([[0,-1,0],[-1,5,-1],[0,-1,0]],dtypenp.float32)returncv2.filter2D(frame,-1,kernel)再介绍一下cv2.filter2Ddstcv2.filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])参数说明src输入图像ddepth输出深度-1表示与输入相同kernel卷积核浮点矩阵anchor锚点默认核中心delta结果再加的偏置默认 0borderType边界填充方式如果想再猛一点就把中心改成 9、四周全 -1kernel_strongnp.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]],dtypenp.float32)还有一种更「自然」的锐化叫USM反锐化掩模先模糊再用原图减模糊得到边缘叠回去。deffilter_usm(frame,amount1.5,radius3):blurcv2.GaussianBlur(frame,(0,0),radius)returncv2.addWeighted(frame,1amount,blur,-amount,0)效果如下6. 再聊聊其他滤镜既然标题写了「等滤镜」哈哈哈那就顺便把其他几个常玩的也补上。6.1 柔化美颜味的糊deffilter_soft(frame):returncv2.GaussianBlur(frame,(15,15),0)6.2 反色deffilter_invert(frame):returncv2.bitwise_not(frame)6.3 怀旧偏棕黄思路对 BGR 做一组线性变换让画面偏暖、偏黄。deffilter_sepia(frame):kernelnp.array([[0.272,0.534,0.131],# B[0.349,0.686,0.168],# G[0.393,0.769,0.189],# R],dtypenp.float32)sepiacv2.transform(frame,kernel)returnnp.clip(sepia,0,255).astype(np.uint8)6.4 浮雕浮雕核强调方向差分画面会像刻在石头上deffilter_emboss(frame):graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)kernelnp.array([[-2,-1,0],[-1,1,1],[0,1,2]],dtypenp.float32)embosscv2.filter2D(gray,-1,kernel)128embossnp.clip(emboss,0,255).astype(np.uint8)returncv2.cvtColor(emboss,cv2.COLOR_GRAY2BGR)7. 完整小玩意读取图片切换滤镜把上面串起来。用cv2.imread读本地文件按键切换时反复对同一张原图套滤镜按s可把当前效果保存下来。按键约定按键滤镜0原图1灰度2黑白3增强4锐化5柔化6反色7怀旧8浮雕s保存当前效果q/Esc退出完整代码importcv2importnumpyasnpimportosdeffilter_gray(img):graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)returncv2.cvtColor(gray,cv2.COLOR_GRAY2BGR)deffilter_bw(img):graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)clahecv2.createCLAHE(clipLimit2.5,tileGridSize(8,8))bwclahe.apply(gray)returncv2.cvtColor(bw,cv2.COLOR_GRAY2BGR)deffilter_enhance(img,alpha1.4,beta20):returncv2.convertScaleAbs(img,alphaalpha,betabeta)deffilter_sharpen(img):kernelnp.array([[0,-1,0],[-1,5,-1],[0,-1,0]],dtypenp.float32)returncv2.filter2D(img,-1,kernel)deffilter_soft(img):returncv2.GaussianBlur(img,(15,15),0)deffilter_invert(img):returncv2.bitwise_not(img)deffilter_sepia(img):kernelnp.array([[0.272,0.534,0.131],[0.349,0.686,0.168],[0.393,0.769,0.189]],dtypenp.float32)sepiacv2.transform(img,kernel)returnnp.clip(sepia,0,255).astype(np.uint8)deffilter_emboss(img):graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)kernelnp.array([[-2,-1,0],[-1,1,1],[0,1,2]],dtypenp.float32)embosscv2.filter2D(gray,-1,kernel)128embossnp.clip(emboss,0,255).astype(np.uint8)returncv2.cvtColor(emboss,cv2.COLOR_GRAY2BGR)FILTERS{0:(原图,lambdaf:f.copy()),1:(灰度,filter_gray),2:(黑白,filter_bw),3:(增强,filter_enhance),4:(锐化,filter_sharpen),5:(柔化,filter_soft),6:(反色,filter_invert),7:(怀旧,filter_sepia),8:(浮雕,filter_emboss),}defmain():# 图片路径image_pathimages/test.jpgimgcv2.imread(image_path)ifimgisNone:print(f无法读取图片:{image_path})returnmode0print(按 0-8 切换滤镜s 保存q/Esc 退出)whileTrue:name,fnFILTERS[mode]outfn(img)showout.copy()cv2.putText(show,f[{mode}]{name},(20,40),cv2.FONT_HERSHEY_SIMPLEX,1.0,(0,255,0),2)cv2.imshow(OpenCV Image Filters,show)# waitKey(0)等按键再刷新适合静态图片keycv2.waitKey(0)0xFFifkeyin(ord(q),27):breakiford(0)keyord(8):modekey-ord(0)ifkeyord(s):stemos.path.splitext(os.path.basename(image_path))[0]save_pathf{stem}_{name}.jpgcv2.imwrite(save_path,out)print(f已保存:{save_path})cv2.destroyAllWindows()if__name____main__:main()把image_path换成你的图就能玩。想实时预览的话另有摄像头版脚本可对照。效果如下8. 一点小总结你想要的感觉优先试去色、省事灰度更有「照片感」的黑白灰度 CLAHE画面闷、想提精神convertScaleAbs/ LABCLAHE糊、细节发虚锐化核 / USM玩味、做特效反色、怀旧、浮雕参数是滤镜的灵魂同一套核换个alpha、换个clipLimit气质就会不一样。文中使用的测试图片是主打高清免费无水印的扫描小程序「程序员Linc表格识别」上去直接就可以使用嘎嘎好使。最新版本的扫描功能已经支持了导出增强锐化、黑白、加深、灰度等PDF原理上与上述滤镜甚是相近。欢迎大家使用。有什么需要讨论的我们评论区见参考OpenCV: Changing ColorspacesOpenCV: Image FilteringOpenCV: Histograms - Equalization#OpenCV #python #滤镜 #图像处理 #锐化
企业数字化 ERP 产品动态
相关推荐
楼宇自控的“神经末梢”:IO模块如何让建筑学会思考? 现代写字楼里,空调没人时能自动降耗,照明能跟着人流分区启停,水泵根据压差变频调速——这些“聪明”动作背后,都藏着一个低调的关键角色:IO模块。如果把楼宇自控系统比作人体,那DDC/PLC是大脑,传… · 2026/9/27 22:49:47
福州市非遗文化宣传交流平台 福州市非遗文化宣传交流平台选题背景与意义随着全球化进程的加速和现代生活方式的深刻变革,非物质文化遗产(简称“非遗”)正面临前所未有的传承危机。在这一背景下,如何有效保护、传承与发展地方性传统文化,成为社会各… · 2026/9/27 22:49:47
在职考研英语二想提分,先别囤资料,先建一个错题本和固定时段 英语二想提分,很多人第一反应是买一堆资料。我的经验是,资料越囤越多,提分反而越慢——在职的坑就在这:时间本来就碎,资料一多就更不知道该看哪本。英语二就抓三件事:词汇,每天背,碎… · 2026/9/27 22:49:47
海口网络平台网站开发怎么选:3步避开被拖一周的坑 海口网络平台网站开发怎么选:3步避开被拖一周的坑 改个需求建站公司拖一周,上线前夜服务器被挂满暗链,这种惨痛经历在海口做平台网站开发的朋友身上并不罕见。很多甲方对接人在挑选服务商时,往往只看报价和案例,却忽略了最核心的安全底座。其实,… · 2026/9/28 0:46:27
3个真实案例复盘:电商的网站怎么选不踩坑 3个真实案例复盘:电商的网站怎么选不踩坑 网站做好了没人访问,这是很多老板最头疼的事。花了几万块,界面挺漂亮,结果百度搜不到,客户找不到,钱全打水漂。问题出在哪?往往不是设计不够炫,而是 电商的网站… · 2026/9/28 0:46:15
避坑指南:搞定wordpressimg相对路径的3个关键注意事项 避坑指南:搞定wordpressimg相对路径的3个关键注意事项 找建站公司最怕什么?怕花大价钱,最后网站图片加载不出来,或者SEO全废。很多新手一上来就纠结要不要找外包,其实很多时候,坑不是外包挖的,是你自己没搞懂底层逻辑,被忽悠着做了冗… · 2026/9/28 0:46:09
网站建设的目标是啥?2026最新实战拆解:别再用丑模板了 网站建设的目标是啥?2026最新实战拆解:别再用丑模板了 别再盯着那些套模板做出来的“垃圾站”发愁了。 很多创业老板问我,为什么花了大几万做的官网,客户看一眼就划走? 答案很简单:… · 2026/9/28 0:46:09
十大招标网站排行榜多少钱?被黑挂马后怎么救 十大招标网站排行榜多少钱?被黑挂马后怎么救 你的网站昨晚刚上线,今天登录后台发现首页全乱,代码里多了几段莫名其妙的 JS,浏览器直接弹出“您的计算机不安全”警告。这时候你心里只有一个念头: 网站被黑挂马不知道怎么办 ,找谁修, 多少钱… · 2026/9/28 0:45:50
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25