一、 Opencv二值化函數
Opencv二值化是圖像處理中的重要方法之一。它將一副灰度圖像轉換為二值圖像,使每個像素只有兩個可能的值:0(黑色)和255(白色)。Opencv函數cv::threshold()是實現二值化的關鍵函數。
cv.threshold(src, dst, thresh, maxval, type)
參數說明:src為原始圖像,dst為輸出圖像,thresh是閾值,maxval是輸出圖像中的最大值,type是二值化的類型。
二、 Opencv二值化尖銳
在進行二值化時,有些情況下需要盡量減小圖像的噪點並保留邊緣信息。這種情況下可以使用Otsu二值化方法或者自適應閾值方法如cv::adaptiveThreshold()。
其中,Otsu二值化方法在原始圖像中找到一個閾值,使得各類之間的方差最大。它不僅可以通過cv::threshold()函數實現,還可以通過cv::threshold()函數的cv::THRESH_OTSU選項實現。
而自適應閾值是基於圖像局部區域的灰度值計算閾值。它可以適應不同光照條件下的圖像。其函數定義如下:
cv.adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)
三、 Opencv二值化邊緣圖形
在邊緣檢測時,可以先對圖像進行二值化處理,以使邊緣更加明顯。其中最常用的二值化方法為自動閾值二值化,比如Otsu二值化方法。如果要查找對象的輪廓,可以使用cv::findContours()函數。
cv.findContours(binary_image, contours, hierarchy, mode, method, offset)
參數說明:binary_image是二值圖像,contours是向量列表(每個元素存儲一個包含對象邊界點的向量),hierarchy是可選輸出向量,mode是查找輪廓的模式,method是表示輪廓的近似方法,offset是輪廓坐標的偏移量。
四、 Opencv二值化圖像
二值圖像在處理數字、字母或其他形狀的字元時非常有用。如果目標是從圖像中提取這些字元,則需要先將圖像轉換為二進位圖像(也稱為二值圖像)。可以通過setThreshold()函數手動設置閾值。在使用該函數時,需要先將圖像灰度化,然後通過cv::threshold()函數進行二值化處理。
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) ret,thresh_img = cv.threshold(img_gray, 100, 255, cv.THRESH_BINARY)
五、 Opencv二值化演算法
Opencv支持的二值化演算法有三種:全局閾值,自適應閾值和Otsu閾值。其中,全局閾值會針對整幅圖像計算一個固定閾值,而自適應閾值會基於輸入圖像的局部區域計算閾值。Otsu閾值會自動選擇一合適的閾值,以最合適的方式分離背景和前景。
六、 Opencv二值化代碼
下面是一段Opencv二值化的示例代碼:
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) ret,thresh_img = cv.threshold(img_gray, 100, 255, cv.THRESH_BINARY) contours, hierarchy = cv.findContours(thresh_img,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
七、 Opencv二值化閾值怎麼設置
Opencv中二值化的閾值可以通過直方圖和圖像的處理結果來調整。通常,可以在試驗階段手動調整閾值值,直到取得最優結果。然而,設置閾值的關鍵點是要理解二值化背後的原理,明智地選擇合適的方法極其重要。常見的選擇方法有以下兩種:
1)Otsu閾值:根據輸入圖像自動計算合適的閾值
ret,thresh_img = cv.threshold(img_gray,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
2)手動選擇:根據實驗觀察,可以手動選擇最佳閾值
ret,thresh_img = cv.threshold(img_gray, threshold_value, max_value, threshold_type)
八、 Opencv二值化文字提取
二值化在文字圖像處理中是重要的一步。文字二值化的目標是將文字上的線條更清楚地分離開來。可以使用Opencv的二值化方法進行文字提取。下面是一個文字提取的示例代碼:
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) blurred_img = cv.GaussianBlur(img_gray, (5,5), 0) threshold_image = cv.adaptiveThreshold(blurred_img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\ cv.THRESH_BINARY,11,2) contours, hierarchy = cv.findContours(threshold_image,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
文字提取需要進行多次處理,比如先進行圖像模糊等預處理操作。最後再進行二值化處理時,可以選擇自適應或Otsu等方法。此外,文字提取的關鍵是檢測和捕獲文字輪廓。這可以使用findContours()函數實現。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/282780.html