閾值化的基本思想是:給定乙個陣列和乙個閾值,然後根據陣列中的每個元素是低於還是高於閾值而進行一些處理。
函式宣告:
對陣列元素進行固定閾值操作
void cvthreshold( const cvarr* src, cvarr* dst, double threshold,srcdouble max_value, int threshold_type );
原始陣列 (單通道 , 8-bit of 32-bit 浮點數).
dst輸出陣列,必須與 src 的型別一致,或者為 8-bit.
threshold
閾值
max_value
使用 cv_thresh_binary 和 cv_thresh_binary_inv 的最大值.
threshold_type
閾值型別 (見討論)
函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。(cvcmps 也可以達到此目的) 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 threshold_type 確定:
threshold_type=cv_thresh_binary:下面是圖形化的閾值描述:dst(x,y) = max_value, if src(x,y)>threshold
0, otherwise
threshold_type=cv_thresh_binary_inv:
dst(x,y) = 0, if src(x,y)>threshold
max_value, otherwise
threshold_type=cv_thresh_trunc:
dst(x,y) = threshold, if src(x,y)>threshold
src(x,y), otherwise
threshold_type=cv_thresh_tozero:
dst(x,y) = src(x,y), if (x,y)>threshold
0, otherwise
threshold_type=cv_thresh_tozero_inv:
dst(x,y) = 0, if src(x,y)>threshold
src(x,y), otherwise
實現**:
/*
* 閾值化
*/#include "highgui.h"
#include "cv.h"
#includevoid sum_rgb(iplimage* img, iplimage* dst);
void dothreshold(iplimage* img)
} cvdestroywindow("thresh");
cvreleaseimage(&img);
cvreleaseimage(&dst);
}void sum_rgb(iplimage* img, iplimage* dst)
實現結果:
用注釋部分的程式替換:另一種組合不同通道,並閾值化影象的方法
/*
* 閾值化
*/#include "highgui.h"
#include "cv.h"
#includevoid sum_rgb(iplimage* img, iplimage* dst);
void dothreshold(iplimage* img)
} cvdestroywindow("thresh");
cvreleaseimage(&img);
cvreleaseimage(&dst);
}void sum_rgb(iplimage* img, iplimage* dst)
結果:
這是一種改進的閾值技術,其中閾值本身是乙個變數。
函式宣告:
自適應閾值方法
void cvadaptivethreshold( const cvarr* src, cvarr* dst, double max_value,srcint adaptive_method=cv_adaptive_thresh_mean_c,
int threshold_type=cv_thresh_binary,
int block_size=3, double param1=5 );
輸入影象.
dst輸出影象.
max_value
使用 cv_thresh_binary 和 cv_thresh_binary_inv 的最大值.
adaptive_method
自適應閾值演算法使用:cv_adaptive_thresh_mean_c 或 cv_adaptive_thresh_gaussian_c (見討論).
threshold_type
取閾值型別:必須是下者之一
block_size
用來計算閾值的象素鄰域大小: 3, 5, 7, ...
param1
與方法有關的引數。對方法 cv_adaptive_thresh_mean_c 和 cv_adaptive_thresh_gaussian_c, 它是乙個從均值或加權均值提取的常數(見討論), 儘管它可以是負數。
函式 cvadaptivethreshold 將灰度影象變換到二值影象,採用下面公式:
threshold_type=cv_thresh_binary:其中 ti 是為每乙個象素點單獨計算的閾值dst(x,y) = max_value, if src(x,y)>t(x,y)
0, otherwise
threshold_type=cv_thresh_binary_inv:
dst(x,y) = 0, if src(x,y)>t(x,y)
max_value, otherwise
對方法 cv_adaptive_thresh_mean_c,先求出塊中的均值,再減掉param1。
對方法 cv_adaptive_thresh_gaussian_c ,先求出塊中的加權和(gaussian), 再減掉param1。
實現**:
/*
* 自適應閾值
*/#include "cv.h"
#include "highgui.h"
#include "math.h"
void doadaptthreshold(iplimage* img)
結果:
第一張圖為原圖的灰度圖
第二張圖為二值閾值化
第三張為自適應二值閾值化
opencv雙閾值化
對於影象中有明顯的雙分界特徵,我們考慮用雙閾值方法進行二值化操作。根據雙閾值操作方法,對於8位灰度圖應用該閾值化方法操作時,預先設定好特 定的閾值量thresh1,thresh2,並且thresh 如下 include opencv2 highgui highgui.hpp include open...
Python呼叫OpenCV閾值化
這一篇主要有兩點 普通閾值化和自適應閾值化。普通閾值化用到的函式是cv2.threshold,其函式原型為 threshold src,thresh,maxval,type,dst none 其中,type的取值有以下幾種cv2.thresh binary cv2.thresh binary inv...
opencv 學習之 閾值化 2 自適應閾值
自適應閾值化函式 void cvadaptivethreshold const cvarr src,cvarr dst,double max value,int adaptive method cv adaptive thresh mean c,int threshold type cv thres...