009 OpenCV 二值化 threshold

一、環境

本文使用環境為:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、二值化算法

2.1、概述

在機器視覺應用中,OpenCV的二值化函數threshold具有不可忽視的作用。主要的功能是將一幅灰度圖進行二值化處理,以此大幅降低圖像的數據量,從而突顯出目標的輪廓。

具體來說,函數threshold可以將圖像上的像素根據閾值劃分為兩類:大于或等于閾值的像素值被賦為最大值(或最大灰度值),而小于閾值的像素值則被賦為最小值(或最小灰度值)。這樣的操作對于后續的特征提取和圖像分析極為重要。例如,我們可以通過設定不同的閾值來對圖像進行不同程度的二值化處理,以適應不同的應用場景。

然而,雖然threshold函數在機器視覺應用中有著廣泛的應用,但其也存在一些缺點。例如,它只能處理單通道的圖像,即灰度圖像,而不能直接處理彩色圖像。此外,選擇合適的閾值也是一項挑戰,因為如果閾值選擇不當,可能會導致圖像信息的丟失或者噪聲的增加。

總的來說,OpenCV中的二值化函數threshold在機器視覺應用中扮演著重要角色,能夠有效地簡化圖像數據并突出目標特征。但同時我們也需要注意其存在的一些局限性,如僅支持灰度圖像以及閾值選擇的困難等。

2.2、函數API

OpenCV中的二值化函數threshold是一種將圖像轉換為二值圖像的方法。它通過設置一個閾值,將圖像中的像素值分為兩類:大于閾值的像素值為255(白色),小于等于閾值的像素值為0(黑色)。這種方法常用于圖像處理和計算機視覺任務中,如邊緣檢測、輪廓識別等。

函數原型:

cv2.threshold(src, thresh, maxval, type)

參數說明:

  • src:輸入圖像,通常為灰度圖像。
  • thresh:閾值,用于將像素值分為兩類。
  • maxval:最大值,當像素值大于閾值時,將其設置為此值。
  • type:閾值類型,有以下幾種選擇:
    • cv::THRESH_BINARY:二值化,大于閾值的像素值為255,小于等于閾值的像素值為0。
    • cv::THRESH_BINARY_INV:反向二值化,大于閾值的像素值為0,小于等于閾值的像素值為255。
    • cv::THRESH_TRUNC:截斷,大于閾值的像素值保持不變,小于等于閾值的像素值設置為閾值。
    • cv::THRESH_TOZERO:零化,大于閾值的像素值保持不變,小于等于閾值的像素值設置為0。
    • cv::THRESH_TOZERO_INV:反向零化,大于閾值的像素值設置為0,小于等于閾值的像素值保持不變。

三、代碼演示

代碼演示5種二值算法效果,5中算法的區別這里再貼一次:

  • cv::THRESH_BINARY:二值化,大于閾值的像素值為255,小于等于閾值的像素值為0。
  • cv::THRESH_BINARY_INV:反向二值化,大于閾值的像素值為0,小于等于閾值的像素值為255。
  • cv::THRESH_TRUNC:截斷,大于閾值的像素值保持不變,小于等于閾值的像素值設置為閾值。
  • cv::THRESH_TOZERO:零化,大于閾值的像素值保持不變,小于等于閾值的像素值設置為0。
  • cv::THRESH_TOZERO_INV:反向零化,大于閾值的像素值設置為0,小于等于閾值的像素值保持不變。
from __future__ import print_function
import cv2 as cv
import argparsemax_value = 255
max_type = 4
max_binary_value = 255
# 這里有5種二值化算法,在gui界面使用滑條選擇
trackbar_type = 'Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted'
trackbar_value = 'Value'
window_name = 'Threshold Demo'
# 二值化
def Threshold_Demo(val):#0: Binary#1: Binary Inverted#2: Threshold Truncated#3: Threshold to Zero#4: Threshold to Zero Invertedthreshold_type = cv.getTrackbarPos(trackbar_type, window_name)threshold_value = cv.getTrackbarPos(trackbar_value, window_name)_, dst = cv.threshold(src_gray, threshold_value, max_binary_value, threshold_type )cv.imshow(window_name, dst)
parser = argparse.ArgumentParser(description='Code for Basic Thresholding Operations tutorial.')
parser.add_argument('--input', help='Path to input image.', default='data/stuff.jpg') # 讀取圖片
args = parser.parse_args()
src = cv.imread(cv.samples.findFile(args.input))
if src is None:print('Could not open or find the image: ', args.input)exit(0)
# 彩色圖轉灰度圖
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.namedWindow(window_name)
# 創建滑條
cv.createTrackbar(trackbar_type, window_name , 3, max_type, Threshold_Demo)
cv.createTrackbar(trackbar_value, window_name , 0, max_value, Threshold_Demo)
Threshold_Demo(0)
cv.waitKey()

??? #0: Binary

? ? #1: Binary Inverted?

? #2: Threshold Truncated?

? #3: Threshold to Zero

? ? #4: Threshold to Zero Inverted

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

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

相關文章

ASP.NET Core 啟用CORS

瀏覽器的安全阻止一個域的本地頁面請求另外不同域的本地頁面,這個限制叫同源策略,這個安全特性用來阻止惡意站點從別的網站讀取數據 例如假如我有一個頁面叫A.html https://foo.example/A.html 現在頁面A.html有一個ajax代碼嘗試讀取B.html的HTML的源…

【PyQt】(自定義類)陰影遮罩

寫了一個感覺有些用的小玩具。 用于給控件添加陰影遮罩(強調主控件的同時屏蔽其余控件的點擊) 自定義陰影遮罩Mask: from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout from PyQt5.QtGu…

leetcode:合并兩個有序鏈表

題目描述 題目鏈接:21. 合并兩個有序鏈表 - 力扣(LeetCode) 題目分析 這個算法思路很簡單:就是直接找小尾插 定義一個tail和head,對比兩個鏈表結點的val,小的尾插到tail->next,如果一個鏈表…

每日一題:LeetCode-589.N叉樹的前序遍歷序列構造二叉樹

每日一題系列(day 01) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

企業微信身份驗證

本篇主要是在上一篇獲取第三方憑證基礎上,用戶通過三方網站自定義授權登錄后獲取用戶信息,以實現用戶綁定登錄功能。 構造第三方應用授權鏈接 如果第三方應用需要在打開的網頁里面攜帶用戶的身份信息, 第一步需要構造如下的鏈接來獲取授權c…

馬養殖場建設VR模擬實訓教學平臺具有靈活性和復用性

為保障養殖場生物安全,避免疫病傳播,學生出入養殖場受時間和地域的限制, 生產實習多以參觀為主,通過畜牧企業技術人員的講解,學生被動了解生產過程。為了解決畜牧養殖實訓難的問題,借助VR技術開展畜牧養殖虛…

通過云服務器部署JavaWeb項目

文章目錄 搭建Java運行環境部署項目更改部分項目代碼打包項目把war包上傳到webapps目錄下驗證程序 搭建Java運行環境 搭建環境的部分比較復雜,為了讓大家的思路更加清晰特別總結為一篇博客點擊查看 部署項目 更改部分項目代碼 打包項目 把war包上傳到webapps目錄…

大洋鉆探系列之三IODP 342航次是干什么的?(下)

上文簡要地介紹IODP342航次的總體情況,本文以航次1個鉆孔(U1403)為例,更為詳細地系統展示大洋鉆探航次的工作和成果。 ?編輯? 站位疊加多波束影像的成果圖見下圖,從圖中的顏色效果可以看出,此多波束的成…

歸并排序算法

文章目錄 歸并排序一、歸并排序思路二、歸并排序算法模板三、題目代碼 歸并排序 一、歸并排序思路 二、歸并排序算法模板 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;//中間值merge_sort(q, l, mid);merge_sort(q, mid 1, r);…

大數據分析與應用實驗任務九

大數據分析與應用實驗任務九 實驗目的 進一步熟悉pyspark程序運行方式; 熟練掌握pysaprkRDD基本操作相關的方法、函數,解決基本問題。 實驗任務 進入pyspark實驗環境,打開命令行窗口,輸入pyspark,完成下列任務&am…

Redis入門教程

1. 什么是NoSql NoSQL一詞最早出現于1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系數據庫。2009年,Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論,來自Rackspace的Eric Evans再次提出了NoSQL的概念&am…

onnx導出報錯 | IndexError: index_select(): Index is supposed to be a vector

解決方案: 在torch.onnx.export鐘添加do_constant_foldingFalse,如下 torch.onnx.export(model,(None, text),text_fp32_onnx_path,input_names[text],output_names[unnorm_text_features],export_paramsTrue,opset_version13,verboseTrue,do_constant_…

編程參考 - C++ Code Review: 一個計算器的項目

GitHub - jroelofs/calc: Toy Calculator Toy Calculator 1,拿到一個project,第一眼看,沒有配置文件,說明沒有引入持續集成系統,continuous integration system。 2,然后看cmake文件,使用的子…

使用Python的turtle模塊繪制鋼鐵俠圖案

1.1引言: 在Python中,turtle模塊是一個非常有趣且強大的工具,它允許我們以一個可視化和互動的方式學習編程。在本博客中,我們將使用turtle模塊來繪制鋼鐵俠的圖案。通過調用各種命令,我們可以引導turtle繪制出指定的圖…

第十四章 控制值的轉換 - 在DISPLAYLIST中投影值

文章目錄 第十四章 控制值的轉換 - 在DISPLAYLIST中投影值在DISPLAYLIST中投影值 第十四章 控制值的轉換 - 在DISPLAYLIST中投影值 在DISPLAYLIST中投影值 對于 %String 類型(或任何子類)的屬性,XML 投影可以使用 DISPLAYLIST 參數。 簡單…

CrystalDiskInfo/CrystalDiskMark/DiskGenius系統遷移

CrystalDiskInfo 主要用于看硬盤的各種信息,包括但不限于硬盤通電時間、通電次數、硬盤好壞狀態 CrystalDiskMark 主要用于測試硬盤的讀寫速度、連續讀寫速度 DiskGenius 主要用于通過U盤裝操作系統后進行,磁盤分區,更改磁盤名、隱藏部分…

【前端知識】Node——http模塊url模塊的常用操作

一、創建簡易Server const http require(http); const URL require(url);const HTTP_PORT 8088;const server http.createServer((req, res) > {// req:request請求對象,包含請求相關的信息;// res:response響應對象&…

【MISRA C 2012】Rule 5.2 在同一作用域和名稱空間中聲明的標識符應該是不同的

1. 規則1.1 原文1.2 分類 2. 關鍵描述3. 代碼實例 1. 規則 1.1 原文 Rule 5.2 Identifiers declared in the same scope and name space shall be distinct Category Required Analysis Decidable, Single Translation Unit Applies to C90, C99 1.2 分類 規則4.2&#xff…

案例014:Java+SSM+uniapp+mysql基于微信小程序的健身管理系統

文末獲取源碼 開發語言:Java 框架:SSM JDK版本:JDK1.8 數據庫:mysql 5.7 開發軟件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序開發軟件:HBuilder X 小程序…