Python OpenCV圖像處理與深度學習:Python OpenCV圖像分割入門

圖像分割:從基礎到實踐

學習目標

通過本課程,學員們將了解圖像分割的基本概念,掌握使用OpenCV實現圖像分割的方法,包括基于閾值的分割和基于區域的分割技術。同時,學員將能夠獨立完成簡單的圖像分割任務,并理解其背后的原理。

相關知識點

  • Python OpenCV圖像分割

學習內容

1 Python OpenCV圖像分割

1.1 圖像分割基礎

圖像分割是計算機視覺中的一個基本問題,它涉及將圖像劃分為多個部分或區域,每個部分或區域具有相似的屬性,如顏色、紋理或亮度。圖像分割是許多高級圖像處理任務的基礎,如對象識別、圖像分析和醫學圖像處理等。在圖像分割中,目標是將圖像中的像素分組為多個區域,每個區域對應于圖像中的一個特定對象或部分。

圖像分割的重要性在于它能夠幫助計算機理解圖像的內容,從而為后續的圖像分析和處理提供基礎。例如,在醫學圖像處理中,通過分割可以準確地識別出腫瘤的位置和大小;在自動駕駛技術中,圖像分割可以幫助車輛識別道路、行人和其他障礙物。

在本課程中,學員將首先了解圖像分割的基本概念,包括分割的目的、常見的分割方法以及分割結果的評估標準。接下來,探討圖像分割在實際應用中的重要性,以及如何選擇合適的分割方法來解決特定的問題。

1.2 基于閾值的圖像分割

基于閾值的圖像分割是最簡單也是最常用的圖像分割方法之一。這種方法的基本思想是根據圖像的灰度值或顏色值將圖像中的像素分為不同的類別。閾值的選擇是基于閾值分割的關鍵,不同的閾值選擇方法適用于不同的圖像和應用場景。

1.2.1 簡單閾值分割

執行以下指令獲取測試圖片。

!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/3c363b682faa11f09680fa163edcddae/example.jpg

簡單閾值分割是最基本的閾值分割方法,它通過設定一個固定的閾值來將圖像中的像素分為前景和背景。如果像素的灰度值大于閾值,則該像素被標記為前景;否則,被標記為背景。這種方法適用于背景和前景之間灰度值差異明顯的圖像。

import cv2
import numpy as np
from matplotlib import pyplot as plt# 讀取圖像
img = cv2.imread('example.jpg', 0)# 應用簡單閾值分割
ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 顯示結果
plt.subplot(1, 2, 1), plt.imshow(img, 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(thresh1, 'gray')
plt.title('Thresholded Image'), plt.xticks([]), plt.yticks([])
plt.show()

在這里插入圖片描述

1.2.2 自適應閾值分割

自適應閾值分割是一種更高級的閾值分割方法,它根據圖像的局部特性動態地選擇閾值。這種方法適用于圖像中背景和前景灰度值變化較大的情況。自適應閾值分割通過計算每個像素周圍的局部平均灰度值來確定閾值,從而更好地適應圖像的局部特性。

# 應用自適應閾值分割
thresh2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)# 顯示結果
plt.subplot(1, 2, 1), plt.imshow(img, 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(thresh2, 'gray')
plt.title('Adaptive Thresholded Image'), plt.xticks([]), plt.yticks([])
plt.show()
1.3 基于區域的圖像分割

基于區域的圖像分割方法通過分析圖像中的區域特性來實現分割。這些方法通常基于圖像的連通性、顏色或紋理等特征,將圖像中的像素分組為不同的區域。基于區域的分割方法適用于圖像中對象邊界不明顯或背景復雜的情況。

1.3.1 連通區域標記

連通區域標記是一種基于區域的分割方法,它通過標記圖像中的連通區域來實現分割。連通區域是指圖像中具有相同或相似屬性的像素集合。通過連通區域標記,可以將圖像中的不同對象或部分區分開來。

# 讀取圖像
img = cv2.imread('example.jpg', 0)# 二值化圖像
ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 連通區域標記
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary, connectivity=8)# 顯示結果
plt.imshow(labels, cmap='jet')
plt.title('Connected Components'), plt.xticks([]), plt.yticks([])
plt.show()

在這里插入圖片描述

1.3.2 分水嶺算法

分水嶺算法是一種基于區域的分割方法,它通過模擬地形中的分水嶺來實現圖像分割。分水嶺算法將圖像中的每個像素視為地形中的一個點,通過模擬水從高處流向低處的過程,將圖像中的不同區域分隔開來。分水嶺算法適用于圖像中對象邊界不明顯或背景復雜的情況。

# 讀取圖像
img = cv2.imread('example.jpg')# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化圖像
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 距離變換
dist_transform = cv2.distanceTransform(binary, cv2.DIST_L2, 5)
ret, sure_fg = cv2.threshold(dist_transform, 0.7 * dist_transform.max(), 255, 0)# 找到未知區域
sure_fg = np.uint8(sure_fg)
unknown = cv2.subtract(binary, sure_fg)# 標記連通區域
ret, markers = cv2.connectedComponents(sure_fg)# 將所有標記加1,確保背景為1
markers = markers + 1# 將未知區域標記為0
markers[unknown == 255] = 0# 應用分水嶺算法
markers = cv2.watershed(img, markers)
img[markers == -1] = [255, 0, 0]# 顯示結果
plt.subplot(1, 2, 1), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Watershed Segmentation'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(markers, cmap='jet')
plt.title('Markers'), plt.xticks([]), plt.yticks([])
plt.show()

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MQ使用場景分析

異步解耦?系統間通過消息隊列通信,降低耦合度(如訂單系統與庫存系統)典型場景:電商下單后異步通知物流系統?流量削峰?應對突發流量,將請求暫存到消息隊列逐步處理典型場景:秒殺活動時緩沖高并發請求?數…

人工智能學習:NLP文本處理的基本方法

一、分詞 1、分詞介紹 概念 分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符。分詞過程就是找到這樣分界符的過程…

Vue3 中 Proxy 在組件封裝中的妙用

目錄 Vue3 中 Proxy 在組件封裝中的妙用:讓組件交互更優雅 組件封裝中的常見痛點 Proxy 是什么? Proxy 在組件封裝中的應用 基礎組件結構 使用 Proxy 實現方法透傳 代碼解析 父組件中的使用方式 Proxy 的其他應用場景 1. 權限控制 2. 方法調用…

DevExpress WinForms中文教程:Data Grid - 過濾編輯器

DevExpress WinForms擁有180組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝…

華為云CCE

華為云CCE:重構云原生應用的全棧引擎 一、云原生時代的"操作系統" 在數字經濟浪潮中,容器化和微服務架構已成為企業數字化轉型的標配。華為云容器引擎(CCE)作為云原生領域的"操作系統",通過深度…

STM32——Uinx時間戳+BKP+RTC實時時鐘

目錄 一、Uinx時間戳 1.1Uinx簡介 1.2UTC/GMT 1.3時間戳轉換 1.3.1主要數據類型 1.3.2主要函數 1.3.3C語言時間戳轉換示例 1.3.4時間格式化說明符 1.3.5注意事項 二、BKP 2.1BKP簡介 2.2BKP基本結構 三、RTC 3.1RTC簡介 3.2RTC框圖 3.3RTC基本結構 3.4RTC硬件…

Java設計模式是什么?核心設計原則有哪些?

文章目錄什么是設計模式?為什么使用設計模式?設計模式的核心設計原則是什么?1. 開閉原則(Open-Closed Principle, OCP)2. 里氏替換原則(Liskov Substitution Principle, LSP)3. 依賴倒置原則&am…

網絡層和數據鏈路層

目錄 1.網絡層 2.數據鏈路層 1.網絡層 我們知道,我們的消息為了從A端發送到B端,達成遠距離傳輸,我們為此設計了很多協議層,分別是應用層,傳輸層,網絡層,數據鏈路層,網卡&#xff0c…

Redis 的字典:像智能文件柜一樣高效的哈希表實現

目錄 一、從傳統查找的痛點到哈希表的優勢? 二、哈希表的核心結構:文件柜的構成? 2.1、 dictht 結構體:文件柜本體? 2.2、dictEntry 結構體:帶鏈條的文件夾? 2.2.1、 哈希沖突的解決:抽屜里的鏈條? 2.3、字典的高層封裝…

FAST API部署和使用

第一部分:FastAPI 的使用(開發環境) 1. 安裝 首先,你需要安裝 FastAPI 和一個 ASGI 服務器,最常用的是 Uvicorn。 pip install "fastapi[standard]"這個命令會安裝 FastAPI 以及所有推薦的依賴,包…

【JavaWeb】之HTML(對HTML細節的一些總結)

大家天天開心! 文章目錄 前言一、HTML的簡介二、HTML運行方式三、html 的標簽/元素-說明四、表單注意事項總結 前言 首先我們在把Java基礎學習完之后,我們就要進行網站方面的開發了,我們要了解網頁的組成,而網頁的組成有HTML,CSS,…

互聯網醫院品牌IP的用戶體驗和生態構建

一、患者體驗與信任構建互聯網醫院品牌IP的價值核心在于獲得患者的深度信任,而卓越的用戶體驗是實現這一目標的關鍵路徑。在醫療服務同質化嚴重的當下,患者體驗已成為醫療機構差異化競爭的重要維度。研究表明,良好的用戶體驗能夠提高用戶滿意…

【Node.js教程】Express框架入門:從搭建到動態渲染商品列表

前言 Visual Studio Code(簡稱VSCode)是微軟開發的一款免費開源跨平臺代碼編輯器,憑借其免費、開源、跨平臺的特性,以及豐富的插件生態和美觀的界面,成為前端開發者的首選工具。 本文將帶你從零開始學習Express框架,包括搭建項目、配置路由、使用中間件以及實現動態渲染…

眾擎機器人開源代碼解讀

一,綜述 EngineAI ROS 包: 高層開發模式:用戶可通過發布身體速度指令,直接調用 EngineAI 機器人的行走控制器。底層開發模式:用戶可通過發布關節指令,自主開發專屬的控制器。 ROS2 package:全…

Windows系統安裝Git詳細教程

文章目錄步驟 1:下載 Git 安裝包步驟 2:運行安裝程序步驟 3:選擇安裝路徑步驟 4:選擇組件步驟 5:選擇默認編輯器步驟 6:選擇路徑環境變量步驟 7:選擇 HTTPS 協議的傳輸方式步驟 8:配…

leetcode 3446. 按對角線進行矩陣排序 中等

給你一個大小為 n x n 的整數方陣 grid。返回一個經過如下調整的矩陣:左下角三角形(包括中間對角線)的對角線按 非遞增順序 排序。右上角三角形 的對角線按 非遞減順序 排序。示例 1:輸入: grid [[1,7,3],[9,8,2],[4,…

攜程旅行 web 驗證碼 分析

聲明 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 逆向分析 部分python代碼 result cp…

JavaEE 進階第一期:開啟前端入門之旅(上)

專欄:JavaEE 進階躍遷營 個人主頁:手握風云 一、HTML基礎 1.1. 什么是HTML HTML(Hyper Text Markup Language),超文本標記語言。 超文本:比文本要強大,通過鏈接和交互式方式來組織和呈現信息的文本形式。不僅僅有文本…

4.5 PBR

1.PBR簡介 2.高光工作流 3.金屬工作流1.PBR簡介 PBR(Physically Based Rendering, 基于物理的渲染)的工作流分為金屬工作流和高光工作流2.高光工作流 高光工作流是一種傳統的工作流, 現在用的相對較少, 但是在某些特定情況下能提供更精細的控制a.核心思想它不區分金屬和非金屬,…

09.《路由基礎知識解析和實踐》

09.路由基礎 文章目錄09.路由基礎核心概念路由關鍵組成部分三層轉發原理介紹(通信流程)路由類型及配置直連路由(direct)實驗示例**靜態路由(Static)****實驗示例****動態路由****RIP(routing information protocol---路…