亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV圖像的二值化怎么實現

發布時間:2023-02-24 16:21:30 來源:億速云 閱讀:85 作者:iii 欄目:開發技術

這篇“OpenCV圖像的二值化怎么實現”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“OpenCV圖像的二值化怎么實現”文章吧。

圖像二值化( Image Binarization)就是將圖像上的像素點的灰度值設置為0或255,也就是將整個圖像呈現出明顯的黑白效果的過程。

二值化的原理

import cv2

img = cv2.imread('img/lena.jpg')
# 轉為灰度圖
new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
height, width = new_img.shape[0:2]

# 設置閾值
thresh = 60

# 遍歷每一個像素點
for row in range(height):
    for col in range(width):
        # 獲取到灰度值
        gray = new_img[row, col]
        # 如果灰度值高于閾值 就等于255最大值
        if gray > thresh:
            new_img[row, col] = 255
        # 如果小于閾值,就直接改為0
        elif gray < thresh:
            new_img[row, col] = 0

cv2.imshow('img', new_img)
cv2.waitKey()

OpenCV提供的圖像二值化API

threshold()方法參數:

  • 圖片矩陣

  • 閾值

  • 圖片中的最大值

  • 二值化的方式

二值化的方式:

THRESH_BINARY高于閾值改為255,低于閾值改為0
THRESH_BINARY_INV高于閾值改為0,低于閾值改為255
THRESH_TRUNC截斷,高于閾值改為閾值,最大值失效
THRESH_TOZERO高于閾值不改變,低于閾值改為0
THRESH_TOZERO_INV高于閾值該為0,低于閾值不改變
import cv2

img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)

thresh, new_img = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)

print(thresh)
cv2.imshow('img', img)
cv2.imshow('NEW_IMG', new_img)
cv2.waitKey()

自適應閾值

使用一個全局值作為閾值。但是在所有情況下這可能都不太好。

如果圖像在不同區域具有不同的照明條件。

在這種情況下,自適應閾值閾值可以幫助。這里,算法基于其周圍的小區域確定像素的閾值。

因此,我們為同一圖像的不同區域獲得不同的閾值,這為具有不同照明的圖像提供了更好的結果。

adaptlive()方法參數:

  • 1.圖片矩陣

  • 2.圖片灰度最大值

  • 3.計算閾值的方法

  • 4.閾值類型

  • 5.處理塊大小

  • 6.算法所用的常量C

cv2.ADAPTIVE_THRESH_MEAN_C:該閾值是該附近區域減去恒定的平均&Ccedil;。

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:閾值是鄰域值減去常數C的高斯加權和。

import cv2

img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)

thresh_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)

cv2.imshow('thresh_img', thresh_img)
cv2.waitKey()

大津算法(最大類間方差法)

圖像分割中閾值選取的最佳算法

threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
import cv2

img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)

# 使用255的閾值進行二值化
ret, thresh_img = cv2.threshold(img, 255, 255, cv2.THRESH_BINARY)
cv2.imshow('normal', thresh_img)

# 使用高斯濾波模糊圖像  參數1: 圖片矩陣  參數2:卷積核 參數3: 越大越模糊
gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imshow('gaussian_img', gaussian_img)

# 使用大津算法0閾值二值化經過高斯濾波模糊后的圖像
ret, thresh_img = cv2.threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

cv2.imshow('otsu', thresh_img)

cv2.imshow('img', img)
cv2.waitKey()

以上就是關于“OpenCV圖像的二值化怎么實現”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉荫县| 宁津县| 广安市| 开化县| 宽城| 长春市| 高青县| 都安| 静宁县| 清徐县| 家居| 丰原市| 昌江| 常宁市| 宣化县| 乌兰察布市| 新乐市| 丽江市| 额尔古纳市| 辽阳市| 本溪| 乐陵市| 平凉市| 庆安县| 花垣县| 澎湖县| 余干县| 璧山县| 巴里| 秭归县| 泸西县| 灌阳县| 新和县| 周宁县| 福建省| 红安县| 项城市| 新郑市| 崇阳县| 安丘市| 婺源县|