【scipy 基礎】--圖像處理

来源:https://www.cnblogs.com/wang_yb/archive/2023/11/14/17830942.html
-Advertisement-
Play Games

SciPy庫本身是針對科學計算而不是圖像處理的,只是圖像處理也包含了很多數學計算,所以Scipy也提供了一個專門的模塊ndimage用於圖像處理。 ndimage模塊提供的功能包括輸入/輸出圖像、顯示圖像、基本操作(如裁剪、翻轉、旋轉等)、圖像過濾(如去噪、銳化等)、圖像分割、分類、特征提取以及註冊 ...


SciPy庫本身是針對科學計算而不是圖像處理的,只是圖像處理也包含了很多數學計算,
所以Scipy也提供了一個專門的模塊ndimage用於圖像處理。

ndimage模塊提供的功能包括輸入/輸出圖像、顯示圖像、基本操作(如裁剪、翻轉、旋轉等)、圖像過濾(如去噪、銳化等)、圖像分割、分類、特征提取以及註冊/配準等任務。

這個模塊支持多種圖像格式的讀取和寫入,使得對圖像的處理變得方便快捷。

1. 主要功能

雖然圖像處理不是Scipy的主要目的,Scipy中也提供了70多個各類圖像處理函數。

類別 主要函數 說明
過濾器 包含convolve等20多個函數 各類捲積和濾波相關的計算函數
傅立葉濾波器 包含fourier_ellipsoid等4個函數 多維橢球傅里葉,高斯傅里葉等濾波器
圖像插值 包含affine_transform等8個函數 圖像的反射變換,移動,旋轉等相關函數
圖像測量 包含center_of_mass等將近20個函數 計算圖像幾何特征的相關函數
形態學 包含binary_closing等20多個函數 圖像的侵蝕,膨脹,二元開閉運算等等

圖像處理底層函數專業性較強,下麵結合圖片演示一些比較直觀的例子。

2. 邊緣檢測

圖像邊緣檢測在電腦視覺和圖像處理中是非常重要的任務之一。
邊緣是圖像中像素值發生顯著變化的地方,它可以提供有關圖像的重要信息,例如物體的輪廓、邊界等。

ndimage模塊中提供了多種演算法來檢測邊緣,下麵演示三種不同的邊緣檢測演算法的效果:
(示例中所用的圖片是維基百科上找的一個python logo

2.1. sobel演算法

import matplotlib.pyplot as plt
import cv2
from scipy import ndimage

image = plt.imread("d:/share/python-logo.png")
# 圖像灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用索貝爾邊緣檢測演算法
name = "sobel"
edges = ndimage.sobel(gray)

# 顯示原始圖像和邊緣檢測結果
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image)
ax[0].set_title("原始圖像")
ax[1].imshow(gray, cmap="gray")
ax[1].set_title("灰度圖像")
ax[2].imshow(edges, cmap="gray")
ax[2].set_title("邊緣檢測({}演算法)".format(name))
plt.show()

image.png

2.2. prewitt演算法

代碼和上面的類似,不同的部分就下麵兩行。

# 使用prewitt邊緣檢測演算法
name = "prewitt"
edges = ndimage.prewitt(gray)

image.png

2.3. laplace演算法

上面兩種演算法的效果看上去很類似,laplace演算法的結果看上去比上面兩種效果更好一些。

name = "laplace"
edges = ndimage.laplace(gray)

image.png

3. 侵蝕和膨脹

侵蝕和膨脹是最基本的兩種圖像形態學操作,它們的作用用來增強目標特征。
仍然使用上面的python logo圖片,演示侵蝕和膨脹的操作。

import matplotlib.pyplot as plt
import cv2
from scipy import ndimage

image = plt.imread("d:/share/python-logo.png")
# 圖像灰度化
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 圖像侵蝕
structure = ndimage.generate_binary_structure(2, 2)
erosion = ndimage.binary_erosion(image, structure)

# 圖像膨脹
dilation = ndimage.binary_dilation(image, structure)

# 顯示原始圖像、侵蝕圖像和膨脹圖像
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image, cmap="gray")
ax[0].set_title("灰度圖像")
ax[1].imshow(erosion, cmap="gray")
ax[1].set_title("圖像--侵蝕")
ax[2].imshow(dilation, cmap="gray")
ax[2].set_title("圖像--膨脹")
plt.show()

image.png
簡單來說,侵蝕操作會擴張圖像中黑色的區域,反之,膨脹操作會擴張圖像中白色的區域。
直觀上來看的話,侵蝕變了,膨脹變了。

4. 總結

Scipy圖像模塊本質上是把圖像當作數組來處理,
雖然它不是專門的圖像處理庫,不過它處理速度很快,且和numpy等庫結合緊密,
經常處理圖像的朋友可以把它當成一個輔助的工具。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.首先是準備施法材料 JDK的下載地址:https://www.oracle.com/java/technologies/downloads/ 然後選擇自己的想要的版本和英雄(系統) 選擇x64 Compressed Archive免安裝版本進行下載(解壓就用,免除瘋狂確認的煩惱) 解壓到某個位置 ...
  • 來源:blog.csdn.net/qq_44384533/article/details/112324224 之前紅包權益領取查詢的介面超時了,因為有用戶訂購的權益有點多 解決方案 用線程池+ FutureTask將1個查詢拆分成多個小查詢 選擇FutureTask是因為它具有僅執行1次run()方 ...
  • NullPointerException(空指針異常):當試圖調用實例方法或訪問實例變數時,對象引用為 null 時拋出。ArithmeticException(算術異常):當試圖做出違反算術規則的操作時拋出,比如除以零。ClassCastException(類轉換異常):當試圖將對象強制轉換為不是... ...
  • 從JDK11到JDK17,到底帶來了哪些特性呢?亞毫秒級的ZGC效果到底怎麼樣呢?值得我們升級嗎?而且升級過程會遇到哪些問題呢?帶著這些問題,本篇文章將帶來完整的JDK11升級JDK17最全實踐。 ...
  • 0 前言 潛心打造國內一流,國際領先的技術乾貨。 文章收錄在我的 GitHub 倉庫,歡迎Star/fork: JavaEdge-Interview 受網路和運行環境影響,應用程式可能遇到暫時性故障,如瞬時網路抖動、服務暫時不可用、服務繁忙導致超時等。 自動重試機制可大幅避免此類故障,保障操作成功執 ...
  • 來源:blog.csdn.net/weixin_42653522/article/details/117151913 1、前言 ApplicationContext 中的事件處理是通過 ApplicationEvent 類和 ApplicationListener 介面提供的。如果將實現了 Appl ...
  • 學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 第二章、第一個Spring程式 1.軟體版本 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5. ...
  • 目錄1.修飾類時2.修飾方法時3.修飾屬性和局部變數時3.1修飾局部變數時3.2修飾成員變數時3.3修飾類變數時4.final與普通變數的區別5.final用於引用 1.修飾類時 1.只能是公共的(public)就算不寫也是public 2.被final修飾的類不可以被繼承 //前面預設有個publ ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...