OpenCV-python小玩意27 如何做灰度、增强锐化、黑白等滤镜
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 #滤镜 #图像处理 #锐化

相关新闻

楼宇自控的“神经末梢”:IO模块如何让建筑学会思考?

楼宇自控的“神经末梢”:IO模块如何让建筑学会思考?

现代写字楼里,空调没人时能自动降耗,照明能跟着人流分区启停,水泵根据压差变频调速——这些“聪明”动作背后,都藏着一个低调的关键角色:IO模块。如果把楼宇自控系统比作人体,那DDC/PLC是大脑,传…

2026/9/27 22:49:47 阅读更多 →
福州市非遗文化宣传交流平台

福州市非遗文化宣传交流平台

福州市非遗文化宣传交流平台选题背景与意义随着全球化进程的加速和现代生活方式的深刻变革,非物质文化遗产(简称“非遗”)正面临前所未有的传承危机。在这一背景下,如何有效保护、传承与发展地方性传统文化,成为社会各…

2026/9/27 22:49:47 阅读更多 →
在职考研英语二想提分,先别囤资料,先建一个错题本和固定时段

在职考研英语二想提分,先别囤资料,先建一个错题本和固定时段

英语二想提分,很多人第一反应是买一堆资料。我的经验是,资料越囤越多,提分反而越慢——在职的坑就在这:时间本来就碎,资料一多就更不知道该看哪本。英语二就抓三件事:词汇,每天背,碎…

2026/9/27 22:49:47 阅读更多 →

最新新闻

安庆网站建设为新手避坑:完整流程揭秘与真实花费

安庆网站建设为新手避坑:完整流程揭秘与真实花费

安庆网站建设为新手避坑:完整流程揭秘与真实花费 改个按钮颜色,建站公司拖了一周还没动静?这种“甲方改需求,乙方装死”的戏码,在安庆的网站建设圈子里简直太常见了。很多刚入行的新人或者准备自己搞网站的老铁,往往因为不懂行里的 完整流程…

2026/9/27 23:34:17 阅读更多 →
G-Helper 快速上手指南:用单文件工具管好性能模式、独显直连与风扇曲线

G-Helper 快速上手指南:用单文件工具管好性能模式、独显直连与风扇曲线

G-Helper 快速上手指南:用单文件工具管好性能模式、独显直连与风扇曲线 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivob…

2026/9/27 23:34:17 阅读更多 →
PyGithub 快速上手指南:从零开始用 Python 操作 GitHub API v3

PyGithub 快速上手指南:从零开始用 Python 操作 GitHub API v3

开发工具 【免费下载链接】PyGithub Typed interactions with the GitHub API v3 项目地址: https://gitcode.com/gh_mirrors/py/PyGithub 点击查看 免费下载 PyGithub 是一个类型完备(Typed)的 Python 库,用于调用 GitHub REST …

2026/9/27 23:34:17 阅读更多 →
风力机缺陷检测数据集VOC转YOLO格式与YOLOv8训练实战

风力机缺陷检测数据集VOC转YOLO格式与YOLOv8训练实战

简介:这是一份面向风力机叶片表面缺陷检测任务的数据集资源,适合从事风电设备智能巡检、计算机视觉目标检测相关研究或工程项目的开发者使用。数据集包含3687张JPEG图片,并配套Pascal VOC格式的XML标注文件和YOLO格式的TXT标注文件&#xff0…

2026/9/27 23:34:17 阅读更多 →
风力机缺陷检测数据集3687张图:VOC+YOLO双格式与YOLOv8训练实践

风力机缺陷检测数据集3687张图:VOC+YOLO双格式与YOLOv8训练实践

简介:面向风力机叶片缺陷检测任务,这份VOCYOLO双格式数据集适合计算机视觉入门者、风机巡检算法研发工程师及目标检测方向研究生使用。数据集说明包含3687张风机图片,每张均配套Pascal VOC格式xml与YOLO格式txt标注,统一为defect单…

2026/9/27 23:34:17 阅读更多 →
电工技术学报征稿启事:电动汽车充换电与V2G研究投稿指南

电工技术学报征稿启事:电动汽车充换电与V2G研究投稿指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 23:33:17 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/27 9:12:14 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →