OpenCV學習心得(7) -- 閾值處理
来源:互联网 发布:mac版steam怎么安装 编辑:程序博客网 时间:2024/05/01 08:11
轉載請注明出處與作者
OpenCV提供了2個函數來處理閾值.
第一個函數
double threshold(InputArray src, OutputArray dst, double thresh, double maxVal, int thresholdType);
這個函數是使用一個固定的值thresh來分割區間的.可以用來得到2值圖或者濾除噪聲.或者濾除一些很小或很大的值.
thresholdType有幾種類型可以選擇:
THRESH_BINARY 當src(x,y)>thresh時填充maxVal,否則填充0;
THRESH_BINARY_INV 當src(x,y)>thresh時填充0,否則填充maxVal;
THRESH_TOZERO 當src(x,y)>thresh時保留原值,否則填充0;
THRESH_TOZERO_INV 當src(x,y)>thresh時填充0,否則保留原值;
THRESH_TRUNC和THRESH_OTSU還沒有研究...待以後補充...
第二個函數,自動閾值
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod,int thresholdType, int blockSize, double C)
這個函數會根據條件對每一個點都計算出一個值,然後根據這個值來判斷最終要填充什麽值.
thresholdType有2個值可以選擇
THRESH_BINARY 當計算出的值>thresh時填充maxVal,否則填充0;
THRESH_BINARY_INV 當計算出的值>thresh時填充0,否則填充maxVal;
adaptiveMethod有2個值可以選擇
ADAPTIVE_THRESH_MEAN_C 使用平均加權的方式計算
ADAPTIVE_THRESH_GAUSSIAN_C 使用高斯函數進行計算.
參數C是一個數值,由adaptiveMethod方式計算出來的值要減去C才能得到最終的值.這個最終的值就是用來判斷要填充什麽值的.所以我們可以將這個值當做一個偏移量來使用.
參數blockSize表示計算的時候使用的矩陣大小,此參數必須是大於1的奇數,例如3,5,7....
類中的代碼:
//!閾值: 將圖像轉換為高對比度的黑白圖像.此函數針對ROI進行處理.必須為單通道圖像//!invert為false時,大於thresh的值轉換為maxval,小於等於thresh的值轉換為0.invert為true時,大於thresh的值轉換為0,小於等於thresh的值轉換為maxval.bool Threshold(double thresh,double maxval,bool invert=false);//!invert為false時,大於thresh的值保留原值,小於等於thresh的值轉換為0.invert為true時,大於thresh的值轉換為0,小於等於thresh的值保留原值.bool Threshold(double thresh,bool invert=false);//!自適應閾值:以每一個點為中心取blocksize大小的矩陣,矩陣中的值求均值再減去valoffset得到一個最終的值,如果原值大於這個最終的值則填充maxval,否則填充0.//!invert為false時,大於最終值則填充maxval,小於等於最終值則填充0.invert為true時,大於最終值則填充0,小於等於最終值則填充maxval.//!useGaussionMode 為true的時候計算均值使用高斯函數進行計算,為false的時候使用平均加權法進行計算.//!blocksize: 為大於1的奇數,如3,5,7,....bool AdaptiveThreshold(double maxval,int blocksize,double valoffset, bool useGaussionMode=false,bool invert=false);
bool COpenCVImage::Threshold(double thresh,double maxval,bool invert){if(m_src.channels()!=1) return false;cv::threshold(m_src(r_roi),m_src(r_roi),thresh,maxval,invert?cv::THRESH_BINARY_INV:cv::THRESH_BINARY);m_modifyed_for_draw=true; return true;}bool COpenCVImage::Threshold(double thresh,bool invert){if(m_src.channels()!=1) return false;cv::threshold(m_src(r_roi),m_src(r_roi),thresh,0,invert?cv::THRESH_TOZERO_INV:cv::THRESH_TOZERO);m_modifyed_for_draw=true; return true;}bool COpenCVImage::AdaptiveThreshold(double maxval,int blocksize,double valoffset, bool useGaussionMode,bool invert){if(m_src.channels()!=1) return false;cv::adaptiveThreshold(m_src(r_roi),m_src(r_roi),maxval,(useGaussionMode?cv::ADAPTIVE_THRESH_GAUSSIAN_C:cv::ADAPTIVE_THRESH_MEAN_C),(invert?cv::THRESH_BINARY_INV:cv::THRESH_BINARY),blocksize,valoffset);m_modifyed_for_draw=true; return true;}
- OpenCV學習心得(7) -- 閾值處理
- OpenCV學習心得
- OpenCV學習心得(1) -- OpenCV的安裝
- OpenCV學習心得(3) -- 在MFC上顯示圖像
- OpenCV學習心得(4) -- 色彩空間的轉
- OpenCV學習心得(5) -- 圖像通道分離
- OpenCV學習心得(6) -- 圖像的縮放
- OpenCV學習心得(8) -- 直方圖的顯示
- OpenCV學習心得(11) -- Mat類型與Arraya
- OpenCV學習心得(2) -- 建立一個類來簡化OpenCV的函數.
- opencv移植dsp心得
- Opencv编程心得
- opencv配置心得
- openCV使用心得
- opencv haar+adaboost使用心得
- opencv haar+adaboost使用心得 .
- opencv haar+adaboost使用心得
- opencv haar+adaboost使用心得
- 第五周任务三
- 第五周实验一
- 第四周 任务二
- Java中各类Cache机制实现解决方案
- 意志力
- OpenCV學習心得(7) -- 閾值處理
- linux中的grep命令
- Java知识拾遗:三大框架的技术起源
- 程序员真的是吃青春饭的吗?(送给我的学生挺好的可以借鉴!)
- 第五周实验三
- 学C++第一个项目实现
- jquer选择器
- 如何打印 RichTextBox
- 第四周实验报告(1)