【python实用小脚本-63】每天花费2小时修复黑白照片,Python一键转换,节省90%时间(建议收藏)

一、应用场景故事

上周,我的朋友小李从家里翻出了一堆老照片,这些照片大多是彩色的,但他想把它们转换成黑白风格,让照片更有复古感。他尝试用Photoshop一张张处理,但花了整整一个周末,才处理了不到一半的照片。他无奈地说:“要是有个工具能自动把彩色照片转成黑白就好了。” 我笑了笑,告诉他其实用Python写一个简单的图像处理程序,就能轻松搞定。于是,我用这段代码,不到10分钟就完成了所有照片的转换,并且效果非常自然。这就是Python的魅力——用简单的代码解决实际问题,提升工作效率。

二、核心代码解析
1. 读取图像
# 功能说明:读取图像
original_image = cv2.imread(original_image_path)
  • 技术原理cv2.imread用于加载图像文件。它会读取图像的内容并将其存储为一个NumPy数组。这就像一个“图像扫描仪”,将图片文件的内容读取到程序中。
  • 参数作用original_image_path是图像文件的路径。函数会根据这个路径找到并加载图像。
  • 易错点提示:新手可能会忘记检查文件路径是否正确,或者文件是否真的存在,导致加载失败。

学以致用:如何修改代码,支持从网络加载图像?

2. 图像转换为灰度
# 功能说明:将彩色图像转换为灰度图像
gray_img = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
  • 技术原理cv2.cvtColor用于将图像从一个色彩空间转换到另一个色彩空间。这里将BGR色彩空间转换为灰度色彩空间。这就像一个“颜色过滤器”,将彩色图像中的颜色信息去掉,只保留亮度信息。
  • 参数作用cv2.COLOR_BGR2GRAY指定了从BGR到灰度的转换方式。original_image是输入的彩色图像。
  • 易错点提示:新手可能会忘记检查输入图像是否为空,导致转换失败。

学以致用:如何修改代码,将灰度图像转换回彩色图像?

3. 图像二值化
# 功能说明:将灰度图像转换为黑白二值图像
thresh = 128
img_bw = cv2.threshold(gray_img, thresh, 255, cv2.THRESH_BINARY)[1]
  • 技术原理cv2.threshold用于将图像转换为二值图像。它会根据设定的阈值(thresh)将图像中的像素分为黑色(0)和白色(255)。这就像一个“图像分割器”,将图像中的内容分成两个部分。
  • 参数作用thresh是阈值,255是最大值,cv2.THRESH_BINARY指定了二值化的类型。gray_img是输入的灰度图像。
  • 易错点提示:新手可能会忘记调整阈值,导致二值化效果不佳。

学以致用:如何修改代码,支持自适应阈值二值化?

流程图

开始
读取图像
转换为灰度图像
二值化处理
保存结果
三、扩展应用场景开发
场景一:批量处理老照片

场景痛点:家庭聚会时,长辈们总是会翻出一堆老照片,但这些照片大多是彩色的,修复和转换为黑白风格工作量巨大。

技术选型对比

  • 手动修复:效率低,需要专业技能。
  • Python自动化处理:效率高,适合批量处理。

代码改进示范

# 批量处理老照片
import os
import cv2def batch_convert_to_bw(input_folder, output_folder):if not os.path.exists(output_folder):os.makedirs(output_folder)for filename in os.listdir(input_folder):if filename.endswith(('.jpg', '.png', '.jpeg')):img_path = os.path.join(input_folder, filename)original_image = cv2.imread(img_path)gray_img = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)thresh = 128img_bw = cv2.threshold(gray_img, thresh, 255, cv2.THRESH_BINARY)[1]output_path = os.path.join(output_folder, "bw_" + filename)cv2.imwrite(output_path, img_bw)print("Batch processing completed!")# 示例调用
batch_convert_to_bw("input_images", "output_images")

学以致用:如何修改代码,支持其他格式的图像文件?

场景二:在线图像处理服务

场景痛点:许多摄影爱好者希望在线将彩色照片转换为黑白风格,但缺乏专业的工具和技术。

技术选型对比

  • 传统图像处理软件:需要本地安装,操作复杂。
  • 基于Web的图像处理服务:用户友好,无需安装。

代码改进示范

# 基于Flask的在线图像处理服务
from flask import Flask, request, jsonify
import cv2
import numpy as npapp = Flask(__name__)@app.route('/convert_to_bw', methods=['POST'])
def convert_to_bw():file = request.files['image']image = cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR)gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)thresh = 128img_bw = cv2.threshold(gray_img, thresh, 255, cv2.THRESH_BINARY)[1]_, buffer = cv2.imencode('.png', img_bw)return jsonify({'image': buffer.tobytes().decode('latin1')})if __name__ == '__main__':app.run(debug=True)

学以致用:如何修改代码,支持其他格式的图像输出?

四、总结

这篇文章通过一个Python图像处理程序,展示了如何利用OpenCV库将彩色图像转换为黑白图像。无论是批量处理老照片,还是开发在线图像处理服务,都可以通过这种方式快速实现。这个案例的完整源码已开源在我的GitCode仓库,可自行搜索下载。不会玩GitCode仓库的,可到这里下载:[链接] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分页管理调试

一、分页管理原理 基本概念: 物理内存被划分为固定大小的页框(Page Frame),逻辑地址空间被划分为相同大小的页(Page)。 通过页表(Page Table)实现逻辑地址到物理地址的映射。 逻辑…

搭建Hadoop集群standalone

在开始配置之前,请确保三台虚拟机都正确启动了! 具体配置步骤如下。 1.上传spark安装包到某一台机器(例如:hadoop100)。 spark.3.1.2-bin-hadoop3.2.tgz。 2.解压。 把第一步上传的安装包解压到/opt/module下(也可以…

AJAX技术全解析:从基础到最佳实践

目录 什么是 AJAX? 工作原理 XMLHttpRequest 基础 现代 Fetch API Axios 第三方库 数据处理 错误处理机制 跨域请求解决方案 最佳实践 总结 1. 什么是 AJAX? AJAX(Asynchronous JavaScript and XML)是一种通过浏览器与…

128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域

📌 本文将介绍如何在 Vue 3 中使用 OpenLayers 实现: 1)用户可在地图上绘制矩形; 2)自动截取该区域地图为图片; 3)一键保存为本地 PNG 图片。 ✨效果如下图所示 🧠一、前言 在地图类…

单片机 | 基于STM32的智能马桶设计

基于STM32的智能马桶设计结合了传感器技术、嵌入式控制及物联网功能,旨在提升用户体验并实现健康监测。以下是其设计原理、功能模块及代码框架的详细解析: 一、系统架构与核心功能 智能马桶的系统架构通常分为主控模块、传感器模块、执行器模块、通信模块及用户交互模块,主…

最短路与拓扑(2)

1、信使 #include<bits/stdc.h> using namespace std; const int N105; int n,m; int g[N][N]; int dist[N]; bool st[N]; const int INF0x3f3f3f3f;int dij(){memset(dist,0x3f,sizeof dist);dist[1]0;for(int i1;i<n;i){int t0;for(int j1;j<n;j){if(!st[j]&…

当 AI 邂逅丝路:揭秘「丝路智旅」,用 RAG 重塑中阿文化旅游体验

目录 系统命名:丝路智旅 (Silk Road Intelligent Travel)系统概述系统架构设计系统功能模块技术选型:为何是它们?系统优势与特点未来展望与扩展总结在数字浪潮席卷全球的今天,古老的丝绸之路正在以一种全新的方式焕发生机。当深厚的文化底蕴遇上尖端的人工智能技术,会碰撞…

SQLPub:一个提供AI助手的免费MySQL数据库服务

给大家介绍一个免费的 MySQL 在线数据库环境&#xff1a;SQLPub。它提供了最新版本的 MySQL 服务器测试服务&#xff0c;可以方便开发者和测试人员验证数据库功能&#xff0c;也可以用于学习 MySQL。 免费申请 在浏览器中输入以下网址&#xff1a; https://sqlpub.com/ SQLP…

list简单模拟实现

成员变量迭代器&#xff08;重点&#xff09;ListIterator运算符重载begin、end 插入、删除inserterase头插、尾插、头删、尾删 operator->const_iterator拷贝构造operator析构函数完整代码 由于前面已经模拟实现了vector&#xff0c;所以这里关于一些函数实现就不会讲的过于…

【计算机视觉】基于Python的相机标定项目Camera-Calibration深度解析

基于Python的相机标定项目Camera-Calibration深度解析 1. 项目概述技术核心 2. 技术原理与数学模型2.1 相机模型2.2 畸变模型 3. 实战指南&#xff1a;项目运行与标定流程3.1 环境配置3.2 数据准备3.3 执行步骤3.4 结果验证 4. 常见问题与解决方案4.1 角点检测失败4.2 标定结果…

多光谱影像:解锁遥感奥秘的 “彩色钥匙”

在遥感领域&#xff0c;多光谱影像犹如一把神奇的 “彩色钥匙”&#xff0c;为我们开启洞察地球表面与大气层的全新视角。 图片来源于星图云开放平台 多光谱影像&#xff0c;顾名思义&#xff0c;就是利用遥感平台上的多光谱传感器&#xff0c;同时对地球目标地物在多个不同光谱…

【ROS2】ROS节点启动崩溃:rclcpp::exceptions::RCLInvalidArgument

1、问题描述 启动ROS节点时,直接崩溃,打印信息如下: terminate called after throwing an instance of rclcpp::exceptions::RCLInvalidArgumentwhat(): failed to create guard condition: context argument is null, at ./src/rcl/guard_condition.c:65 [ros2run]: Abo…

MinerU安装(pdf转markdown、json)

在Windows上安装MinerU&#xff0c;参考以下几个文章&#xff0c;可以成功安装&#xff0c;并使用GPU解析。 整体安装教程&#xff1a; MinerU本地化部署教程——一款AI知识库建站的必备工具 其中安装conda的教程&#xff1a; 一步步教你在 Windows 上轻松安装 Anaconda以及使…

aws 实践创建policy + Role

今天Cyber 通过image 来创建EC2 的时候,要添加policy, 虽然是administrator 的role, 参考Cyber 提供的link: Imageshttps://docs.cyberark.com/pam-self-hosted/14.2/en/content/pas%20cloud/images.htm#Bring 1 Step1:

【ROS2】编译Qt实现的库,然后链接该库时,报错:/usr/bin/ld: XXX undefined reference to `vtable for

1、问题描述 在ROS2工程中,编译使用Qt实现的库,在其它ROS2包链接该库时,报错: /usr/bin/ld: XXX undefined reference to `vtable for2、原因分析 查看链接失败的几个函数接口都是,信号函数(signals 标记的函数)。因为信号函数都只有定义,没有实现,在执行ROS2 colc…

数据库--处理模型(Processing Model)(二)

执行查询的方法有很多,接下来将介绍以更高效和更有效率的方式执行分析工作负载(在OLAP系统中)的不同技术,包括以下内容: 执行并行性(Execution Parallelism)执行引擎(Execution Engines)执行操作符输出(Execution Operator Output)中间数据表示(Intermediate Data …

PostgreSQL pgrowlocks 扩展详解

一、简介 pgrowlocks 是 PostgreSQL 官方提供的扩展模块&#xff0c;用于查看指定表中每一行当前的行级锁&#xff08;Row Lock&#xff09;信息。它非常适用于&#xff1a; 并发冲突排查行级锁等待分析死锁前兆探测热点数据行分析 二、安装与启用 1. 安装前提&#xff08;…

关于xammp数据库打开不了,但是日志没错误的问题解决以及其数据库的备份

这里参考了两篇文章 解决Xampp中mysql无法启动的问题_xampp里面mysql的stop启动不起来-CSDN博客 mysqli_real_connect(): (HY000/1045): Access denied for user ‘root‘‘localhost‘ (using password: YES-CSDN博客 相信很多和我一样&#xff0c;很久没登xammp突然数据库…

在UI 原型设计中,交互规则有哪些核心要素?

在UI 原型设计中&#xff0c;交互规则主要有三个核心要素&#xff0c;分别为重要性、原则与实践&#xff0c;具体表现在&#xff1a; 一、交互规则在 UI 原型设计中的重要性 明确交互逻辑&#xff1a;设计阶段制定交互规则&#xff0c;清晰定义界面元素操作响应。 如社交应用…

BFD与VRRP联动

一、概述 在前面的文章我们学习了VRRP与BFD协议,VRRP(虚拟路由冗余协议)的主要特点是当Master(主)设备出现故障时,Backup(备用)设备能够快速接替Master的转发工作,尽量缩短数据流的中断时间。 在没有采用BFD与VRRP联动机制前,当Master出现故障时,VRRP依靠Backup设置的超时时间来…