【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.pswp.cn/web/79979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79979.shtml
英文地址,請注明出處:http://en.pswp.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設置的超時時間來…