日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV图像处理----图像的二值化

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV图像处理----图像的二值化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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


二值化的原理

import cv2img = 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# 如果小于閾值,就直接改為0elif gray < thresh:new_img[row, col] = 0cv2.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 cv2img = 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()方法參數:

  • 圖片矩陣
  • 圖片灰度最大值
  • 計算閾值的方法
  • 閾值類型
  • 處理塊大小
  • 算法所用的常量C
    • cv2.ADAPTIVE_THRESH_MEAN_C:該閾值是該附近區域減去恒定的平均?。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:閾值是鄰域值減去常數C的高斯加權和。
    import cv2img = 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 cv2img = 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()

    原圖:

    使用255的閾值進行二值化 圖片全黑了:

    使用高斯濾波模糊圖像:

  • 圖片矩陣
  • 卷積核
  • 越大越模糊
  • 使用0閾值的大津算法二值化經過高斯濾波模糊后的圖像:

    總結

    以上是生活随笔為你收集整理的OpenCV图像处理----图像的二值化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。