opencv-閾值化處理

來源:互聯網
上載者:User

標籤:opencv   閾值操作   


原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/threshold/threshold.html目標:

本節簡介:

  • OpenCV中的閾值(threshold)函數: threshold 的運用。
基本理論:
注意:
本節的解釋出自Bradski與Kaehler的書籍  Learning OpenCV 。
什麼是閾值?
  • 最簡單的映像分割的方法。

  • 應用舉例:從一副映像中利用閾值分割出我們需要的物體部分(當然這裡的物體可以是一部分或者整體)。這樣的映像分割方法是基於映像中物體與背景之間的灰階差異,而且此分割屬於像素級的分割。

  • 為了從一副映像中提取出我們需要的部分,應該用映像中的每一個像素點的灰階值與選取的閾值進行比較,並作出相應的判斷。(注意:閾值的選取依賴於具體的問題。即:物體在不同的映像中有可能會有不同的灰階值。

  • 一旦找到了需要分割的物體的像素點,我們可以對這些像素點設定一些特定的值來表示。(例如:可以將該物體的像素點的灰階值設定為:‘0’(黑色),其他的像素點的灰階值為:‘255’(白色);當然像素點的灰階值可以任意,但最好設定的兩種顏色對比較強,方便觀察結果)。

閾值化的類型:
  • OpenCV中提供了閾值(threshold)函數: threshold 。

  • 這個函數有5種閾值化類型,在接下來的章節中將會具體介紹。

  • 為瞭解釋閾值分割的過程,我們來看一個簡單有關像素灰階的圖片,該圖如下。該圖中的藍色水平線代表著具體的一個閾值。

閾值類型1:二進位閾值化
  • 該閾值化類型如下式所示:

  • 解釋:在運用該閾值類型的時候,先要選定一個特定的閾值量,比如:125,這樣,新的閾值產生規則可以解釋為大於125的像素點的灰階值設定為最大值(如8位灰階值最大為255),灰階值小於125的像素點的灰階值設定為0。


閾值類型2:反二進位閾值化
  • 該閾值類型如下式所示:

  • 解釋:該閾值化與二進位閾值化相似,先選定一個特定的灰階值作為閾值,不過最後的設定值相反。(在8位灰階圖中,例如大於閾值的設定為0,而小於該閾值的設定為255)。


閾值類型3:截斷閾值化
  • 該閾值化類型如下式所示:

  • 解釋:同樣首先需要選定一個閾值,映像中大於該閾值的像素點被設定為該閾值,小於該閾值的保持不變。(例如:閾值選取為125,那小於125的閾值不改變,大於125的灰階值(230)的像素點就設定為該閾值)。


閾值類型4:閾值化為0
  • 該閾值類型如下式所示:

  • 解釋:先選定一個閾值,然後對映像做如下處理:1 像素點的灰階值大於該閾值的不進行任何改變;2 像素點的灰階值小於該閾值的,其灰階值全部變為0。


閾值類型5:反閾值化為0
  • 該閾值類型如下式所示:

  • 解釋:原理類似於0閾值,但是在對映像做處理的時候相反,即:像素點的灰階值小於該閾值的不進行任何改變,而大於該閾值的部分,其灰階值全部變為0。


部分代碼:
// ConsoleApplication3_6_23.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;Mat src,gray,dst;int thr_value = 0;int thr_type = 0;const int max_type = 4;const int max_value = 255;const int max_binary_value = 255;char *windowName = "Demo";void Image_thred(int,void*);int _tmain(int argc, _TCHAR* argv[]){src = imread("test.png");if(!src.data)return -1;cvtColor(src,gray,CV_RGB2GRAY);namedWindow("灰階圖",CV_WINDOW_AUTOSIZE);imshow("灰階圖",gray);namedWindow(windowName,CV_WINDOW_AUTOSIZE);createTrackbar("Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted",windowName,&thr_type,max_type,Image_thred);createTrackbar("Value",windowName,&thr_value,max_value,Image_thred);Image_thred(0,0);waitKey(0);return 0;}void Image_thred(int,void*){  /* 0: 二進位閾值     1: 反二進位閾值     2: 截斷閾值     3: 0閾值     4: 反0閾值   */threshold(gray,dst,thr_value,max_binary_value,thr_type);imshow(windowName,dst);}
關鍵函數解釋:
threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
  • src_gray: 輸入的灰階映像的地址。
  • dst: 輸出映像的地址。
  • threshold_value: 進行閾值操作時閾值的大小。
  • max_BINARY_value: 設定的最大灰階值(該參數運用在二進位與反二進位閾值操作中)。
  • threshold_type: 閾值的類型。從上面提到的5種中選擇出的結果。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.