OpenCV 開發 -- 圖像閾值處理


文章目錄

    • @[toc]
    • 1 基本概念
    • 2 簡單閾值處理`cv2.threshold`
    • 3 自適應閾值處理`cv2.adaptiveThreshold`

更多精彩內容
👉內容導航 👈
👉OpenCV開發 👈

1 基本概念

圖像閾值處理(Thresholding)是圖像處理中的一種基本技術,用于將灰度圖像轉換為二值圖像。通過設定一個閾值,將圖像中的像素分為兩類:高于閾值的像素和低于閾值的像素。

使用場景

  • 文檔圖像二值化
  • 圖像分割預處理
  • OCR 前處理
  • 去除圖像噪聲
  • 目標檢測預處理

2 簡單閾值處理cv2.threshold

cv2.threshold

輸入圖像:必須為單通道,若為彩色圖像需先轉換為灰度

函數定義

retval, dst = cv2.threshold(src, thresh, maxval, type)

參數詳解

  1. src(輸入圖像)

    • 類型:單通道灰度圖像(如 cv2.COLOR_BGR2GRAY 轉換后的圖像)。
    • 作用:待處理的輸入圖像,必須為 8-bit32-bit 浮點型
  2. thresh(閾值)

    • 類型floatint
    • 作用:用于與像素值比較的閾值。若像素值大于 thresh,則根據 type 參數處理。
  3. maxval(最大值)

    • 類型floatint
    • 作用:當像素值滿足閾值條件時,賦予的新值(僅對部分 type 有效)。
  4. type(閾值類型)

    • 類型:枚舉值,決定二值化邏輯。常用選項:

      • cv2.THRESH_BINARY:像素值 > thresh → 設為 maxval,否則設為 0
      • cv2.THRESH_BINARY_INV:像素值 > thresh → 設為 0,否則設為 maxval
      • cv2.THRESH_TRUNC:像素值 > thresh → 截斷為 thresh,否則保留原值。
      • cv2.THRESH_TOZERO:像素值 > thresh → 保留原值,否則設為 0
      • cv2.THRESH_TOZERO_INV:像素值 > thresh → 設為 0,否則保留原值。
      • cv2.THRESH_OTSU(需與上述類型組合使用,如 cv2.THRESH_BINARY + cv2.THRESH_OTSU):自動計算最佳閾值(忽略手動設置的 thresh)。

返回值

  • retval:實際使用的閾值。若使用 cv2.THRESH_OTSU,返回自動計算的閾值。
  • dst:處理后的二值化圖像。

使用場景

  1. 圖像二值化:最常見的使用場景之一。通過設定一個閾值,將圖像轉換為僅包含黑白兩種顏色的二值圖像。這對于后續的圖像處理步驟(如邊緣檢測、輪廓提取等)非常有用。
  2. 背景消除:通過閾值處理,可以將圖像中的背景部分與前景部分區分開來,便于提取感興趣的目標。這對于機器視覺任務(如物體識別、跟蹤等)至關重要。
  3. 圖像分割:利用閾值處理可以對圖像進行分割,將圖像中具有相似像素值的區域分隔出來。這有助于進一步分析圖像中的各個部分。
  4. 特征提取:在某些情況下,閾值處理可以用于提取圖像中的某些特定特征,比如顏色特征、紋理特征等。這對于圖像分析和模式識別非常有用。
  5. 減少噪聲:通過閾值處理,可以將一些小的噪聲區域從圖像中去除,從而提高圖像質量。這通常與形態學操作結合使用,以達到更好的效果。
  6. 圖像增強:在某些情況下,閾值處理也可以用于增強圖像的某些部分,例如通過調整閾值來增加圖像的對比度。
  7. 自動閾值確定:使用 cv2.THRESH_OTSUcv2.THRESH_TRIANGLE 參數,可以讓函數自動確定閾值,適用于那些難以手動設定閾值的情況。
  8. 圖像預處理:在進行其他復雜的圖像處理操作之前,通常會對圖像進行預處理,其中閾值處理是一個重要的步驟。它可以簡化后續處理的復雜度,并提高處理效果。
  9. 圖像閾值化跟蹤:在視頻處理中,閾值處理可以用來跟蹤特定的物體或區域。通過動態調整閾值,可以適應不同的光照條件和背景變化。

3 自適應閾值處理cv2.adaptiveThreshold

OpenCV 中用于自適應閾值化的函數,特別適用于光照不均或背景復雜的圖像二值化場景:


adaptiveThreshold

函數定義

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

參數詳解

  1. src(輸入圖像)

    • 類型:必須為 8-bit 單通道灰度圖像(如 cv2.COLOR_BGR2GRAY 轉換后的圖像)。
    • 作用:待處理的輸入圖像,不接受浮點型或多通道圖像。
  2. maxValue(最大值)

    • 類型intfloat
    • 作用:當像素值滿足閾值條件時,賦予的新值(通常為 255)。
  3. adaptiveMethod(自適應方法)

    • 類型:枚舉值,決定如何計算局部閾值。可選:

      • cv2.ADAPTIVE_THRESH_MEAN_C:基于鄰域塊的均值計算閾值(T = 均值 - C)。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:基于鄰域塊的高斯加權均值計算閾值(T = 高斯加權均值 - C)。

  4. thresholdType(閾值類型)

    • 類型:枚舉值,僅支持兩種模式:

      • cv2.THRESH_BINARY:像素值 > 閾值 → 設為 maxValue,否則設為 0。
    • cv2.THRESH_BINARY_INV:像素值 > 閾值 → 設為 0,否則設為 maxValue

  5. blockSize(鄰域塊大小)

    • 類型奇數(如 3, 5, 7)。
    • 作用:計算局部閾值的鄰域窗口尺寸,越大越能平滑噪聲,但可能丟失細節。
  6. C(常數偏移)

    • 類型intfloat
    • 作用:從計算的閾值中減去的常數,用于微調閾值敏感度(通常取正值降低閾值)。

返回值

  • dst:處理后的二值化圖像,尺寸與 src 相同。

注意事項

  1. 輸入限制:必須為 8-bit 單通道灰度圖像,否則報錯。
  2. blockSize 奇偶性:必須為奇數,否則拋出 cv2.error
  3. 參數調優:
    • blockSize:值過小 → 噪聲敏感;值過大 → 細節丟失。
    • C 值:正值降低閾值(更易將像素設為 maxValue),負值提高閾值。
  4. 性能:比全局閾值 cv2.threshold 計算開銷更大。
  5. 對比全局閾值:
    • 優點:適應局部亮度變化。
    • 缺點:無法處理全局對比度極低的圖像(需結合其他預處理)。

使用示例

import numpy as np
import cv2img = cv2.imread('1.png')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 將圖片轉換為灰度圖
img2 = cv2.adaptiveThreshold(img1,250,  # 設定閾值,越大越亮cv2.ADAPTIVE_THRESH_MEAN_C,  # 選擇方法,這里選擇均值cv2.THRESH_BINARY,  # 選擇二值化方法3,  # 鄰域大小, 越大越模糊, 奇數,通常為3或51) # C值,越大越亮,通常為1
cv2.imshow('image', img2)
cv2.waitKey(0)

示例效果
在這里插入圖片描述



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

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

相關文章

單串口服務器-工業級串口聯網解決方案

在工業自動化、智能電網、環境監測等領域,傳統串口設備(如PLC、傳感器、儀表等)的網絡化升級需求日益增長。博為智能單串口服務器憑借高性能硬件架構、多協議支持和工業級可靠性,為RS485設備提供穩定、高效的TCP/IP網絡接入能力&a…

第 9 篇:深入淺出學 Java 語言(JDK8 版)—— 吃透泛型機制,筑牢 Java 類型安全防線

簡介:聚焦 Java 泛型這一“類型安全保障”核心技術,從泛型解決的核心痛點(非泛型代碼的運行時類型錯誤、強制類型轉換冗余)切入,詳解泛型的本質(參數化類型)、核心用法(泛型類/接口/…

MySQL和Redis的數據一致性問題與業界常見解法

一、為什么會出現數據不一致? 根本原因在于:這是一個涉及兩個獨立存儲系統的數據更新操作,它無法被包裝成一個原子操作(分布式事務)。更新數據庫和更新緩存是兩個獨立的步驟,無論在代碼中如何排列這兩個步驟…

coolshell文章閱讀摘抄

coolshell文章閱讀摘抄打好基礎學好英語限制你的不是其它人,也不是環境,而是自己Java打好基礎 程序語言:語言的原理,類庫的實現,編程技術(并發、異步等),編程范式,設計模…

數據庫造神計劃第六天---增刪改查(CRUD)(2)

🔥個人主頁:尋星探路 🎬作者簡介:Java研發方向學習者 📖個人專欄:《從青銅到王者,就差這講數據結構!!!》、 《JAVA(SE)----如此簡單&a…

使用Rust實現服務配置/注冊中心

Conreg 使用 Rust 實現的配置與注冊中心,參考了 Nacos 的設計,簡單易用,使用 Raft 保證集群節點數據一致性。 支持的平臺: UbuntuCentOS其他常見的 Linux 發行版(我們使用 musl 編譯,理論上支持所有主流…

三色標記算法

在 JVM 并發垃圾收集(GC)中,三色標記算法是實現 “GC 線程與用戶線程并行執行” 的關鍵技術,它解決了并發場景下 “如何準確標記存活對象” 的核心問題,是 CMS、G1 等現代收集器的底層基礎。一、三色標記的核心&#x…

OpenStack 管理與基礎操作學習筆記(一):角色、用戶及項目管理實踐

OpenStack實驗 OpenStack命令 admin-openrc.sh 進入管理員視圖查看當前 OpenStack 中的項目列表,驗證是否已經登錄成功切換用戶 修改文件切換用戶上傳文件切換用戶OpenStack 認證管理 實驗介紹 通過 OpenStack Dashboard 和 OpenStack CLI 兩種方式創建角色、用戶、…

直接查找試卷且可以免費下載

有什么網站可以直接查找試卷且可以免費下載? SearXNG開源元搜索引擎 This website shows the SearXNG public instances searx一個可定制的搜索引擎 分享一個基于Blockstack的DApp-searx,一個可定制的搜索引擎。 1- 鏈接 官網地址:https://searx.worl…

【獨立版】智創云享知識付費小程序 v5.0.23+小程序 搭建教程

介紹智創云享知識付費小程序v5.0.23 含PC、小程序、H5 、前端,系統獨立版已修復已知bug問題。框架是一款基于ThinkPHP框架開發的虛擬資源知識付費小程序,為廣大創業者、自媒體及培訓機構提供知識付費、內容付費、資源變現等領域的行業解決方案&#xff1…

布爾運算-區間dp

面試題 08.14. 布爾運算 - 力扣(LeetCode) Solution 這題的思路比較直接,就是枚舉最后一個進行計算的運算符,但是在實現過程中需要注意,定義范式f(l,r)表示l到r范圍,l和r必須為數字,l1,r-1為運…

MyBatis-Plus 擴展全局方法

1.文件內容package com.ruoyi.business.mybatisplus.base;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** 擴展的 Service 接口* 所有自定義 Service 接口都需要繼承此接口…

13.Linux OpenSSH 服務管理

文章目錄Linux OpenSSH 服務管理環境準備OpenSSH 服務介紹SSH 介紹SSH 建立連接的過程加密類型雙向加密過程使用 ssh 訪問遠端CLIssh 工具演示ssh工具配置文件配置 ssh 密鑰認證ssh 故障模擬故障模擬排故故障自定義 SSH 服務配置文件禁止 root 登錄禁止密碼登錄只允許特定用戶登…

速通ACM省銅第五天 賦源碼(MEX Count)

目錄 引言: MEX Count 題意分析 邏輯梳理 代碼實現 結語: 引言: 本來,今天我是想著出倆題或三題題解的,但是在打第一題的時候就天塌了,導致今天就只搓了一道題,這題的難度在CF中為1300的水準&…

【數據結構與算法-Day 27】堆的應用:從堆排序到 Top K 問題,一文徹底搞定!

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

企業即時通訊保障企業通訊安全,提升企業部門協作效率

在當今數字化轉型的大潮中,企業即時通訊軟件已從單純的溝通工具,逐步演變為保障企業數據安全的核心基礎設施。吱吱企業即時通訊軟件通過“私有化部署全流程加密”的雙重機制,為企業構建了一套集“通訊安全”與“部門協作”于一體的數字化解決…

《華為變革法:打造可持續進步的組織》讀書筆記

推薦序一:變革是企業活下去的基礎(胡彥平)華為前常務副總裁、變革指導委員會成員胡彥平在序言中強調,企業存續的核心命題是應對不確定性,而變革能力是破解這一命題的唯一答案。他以華為 30 余年的發展歷程為例&#xf…

第二篇:排序算法的簡單認識【數據結構入門】

排序算法的分類標準 時間復雜度分類 a. 簡單排序算法:時間復雜度O(n),冒泡排序、選擇排序、插入排序; b. 高級排序算法:時間復雜度O(n logn),快速排序、歸并排序、堆排序; c. 線性排序算法:時間…

快速掌握Dify+Chrome MCP:打造網頁操控AI助手

你是否曾經希望那些強大的開源大模型能更貼合你的專業領域,或者學會模仿你的行文風格?其實,實現這個目標的關鍵就在于“微調”。曾幾何時,微調模型是大公司的專屬游戲——動不動就需要幾十張GPU和復雜的分布式訓練技術。 而現在&…

單詞記憶-輕松記憶10個實用英語單詞(15)

1. repaint含義:重新油漆 讀音標注:/?ri??pe?nt/ 例句:We need to repaint the walls after the repairs. 譯文:修理完成后需要重新粉刷墻壁。 衍生含義:重新繪制(圖像場景);翻新…