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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

opencv二值化详解

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

二值化

學習了二值化,我通過看了很多資料,希望通過總結和大家一起學習,一起努力,有錯誤,希望大家指正

在處理圖片操作時,二值化在圖片領域占有很大作用
在數字圖像處理中,二值圖像占有非常重要的地位,圖像的二值化使圖像中數據量大為減少,從而能凸顯出目標的輪廓
opencv中,提供了多種二值化方法

以8位圖為例(即值為0-255)

方法one: cv2.THRESH_BINARY像素灰度值小于閾值全為0,大于閾值全為255
方法two: cv2.THRESH_BINARY_INV像素灰度值小于閾值全為255,大于閾值全為0
方法tree: cv2.THRESH_TRUNC像素灰度值小于閾值不變,大于閾值變為閾值
方法four: cv2.THRESH_TOZERO像素灰度值小于閾值不做任何改變,大于閾值全為0
方法five: cv2.THRESH_TOZERO_INV像素灰度值小于閾值全為0,大于閾值不做任何改變

公式如下

二值化方法
cv2.threshold(src, thresh, maxval, type)
src: 圖片源
thresh: 閾值
maxval: 指當像素值高于(有時是小于)閾值時應該被賦予的新的像素值
type: 表示的是這里劃分的時候使用的是什么類型的算法,常用值為0(cv2.THRESH_BINARY)

OTSU算法
一般,我們不知道用什么閾值可以獲得更好的二值化圖像.OTSU會通過一系列計算,計算出,比較優的閾值(可以理解為,在
圖像直方圖中,如果存在兩峰,那么,我們的閾值應該盡可能的在兩峰之間的峰谷).因此,對于非雙峰圖,用這種方法可能效果
不太理想

OTSU是計算二值化的算法,計算二值化的算法有很多,一般使用OTSU

下面使用OTSU算法實現THRESH_BINARY二值化

import cv2 as cv path='' image=cv.imread(path) image=cv.cvtColor(image,cv.COLOR_RGB2GRAY) ret,binary=cv.threshold(image,0,255,cv.THRESH_BINARY + cv.THRESH_OTSU) print('峰值為:',ret) # ret為OTSU算法得出的閾值 cv.imshow('THRESH_BINRY',binary) cv.waitKey(0) cv.destroyAllWindows()

下面不適應OTSU算法實現THRESH_TRUNC

import cv2 as cv path='' image=cv.imread(path) image=cv.cvtColor(image,cv.COLOR_RGB2GRAY) ret,binary=cv.threshold(image,127,255,cv.THRESH_TRUNC) # 這里指定127為閾值 print('峰值為:',ret) # ret為閾值 cv.imshow('THRESH_BINRY',binary) cv.waitKey(0) cv.destroyAllWindows()

以上為全局二值化,下面介紹一下,局部二值化

局部二值化方法
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
src: 圖像源
maxValue: 灰度像素值上限,舉例為8位圖(255)
adaptiveMethod: 自適應算法:兩種{1:cv2.ADAPTIVE_THRESH_MEAN_C 采用領域內均值2:cv2.ADAPTIVE_THRESH_GAUSSIAN_C 采用領域內像素加權和,權重為高斯窗口}
thresholdType: 為二值化算法,只適用于(cv2.THRESH_BINARY and cv2.THRESH_BINARY_INV)
blockSize: 領域大小,為正方形
C: 閾值等于均值或者加權值減去這個常數(為0相當于閾值 就是求得領域內均值或者加權值)
這種方法理論上得到的效果更好,相當于在動態自適應的調整屬于自己像素點的閾值,而不是整幅圖像都用一個閾值。

imprt cv2 as cv path='' image=cv.imread(path) image=cv.cvtColor(image,cv.COLOR_RGB2GRAY) binary=cv.adaptiveThreshold(image,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2) cv.imshow('ADAPTIVE_THRESH_MEAN_C',binary) cv.waitKey(0) cv2.destroyAllWindows()

以上是我學習二值化后的一些總結,不好之處,歡迎評論,一起學習

總結

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

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