第一種:基本款的二值化(依據閥值進行分類的二值化)
double cv::threshold(InputArray src,OutputArray dst,double thresh,double maxval,int type)
InputArray src:輸入的影像來源
OutputArray dst:輸出的影像來源
double thresh:判定閥值
double maxval:最大值(當像素值大於或小於判定閥值時,用此參數取代)
int
type:設定二值化模式,常見有THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV五種。
THRESH_BINARY:將大於閥值的灰度值設為最大值,反之設為0
THRESH_BINARY_INV:將大於閥值的灰度值設為0,反之設為最大值
THRESH_TRUNC:將大於閥值的灰度值設為閥值,反之則不變
THRESH_TOZERO:將大於閥值的灰度值不變,反之則設為0
THRESH_TOZERO_INV:將大於閥值的灰度值設為0,反之則不變
第二種:進階版的二值化(依據亮度分佈,自動定義閥值進行分類的二值化)
第三種:強大版的二值化(依據區域不同,適應不同閥值進行分類的二值化)
void adaptiveThreshold(InputArray src, OutputArray dst,double maxValue,int adaptiveMethod, int thresholdType, int blockSize, double C)InputArray src:輸入的影像來源
OutputArray dst:輸出的影像來源
double maxval:最大值(當像素值大於或小於判定閥值時,用此參數取代)
int adaptiveMethod:設定自適應模式,有ADAPTIVE_THRESH_MEAN_C(平均法)、ADAPTIVE_THRESH_GAUSSIAN_C(高斯法)兩種。
nt thresholdType:設定二值化模式,即前面提到的二值化五種模式
int blockSize:區塊大小
double C:常數
int blockSize:區塊大小
double C:常數
總結:
現在就來實作一下吧,為了比較好理解基本款二值化操作,我設計了一張圖片,當中分成了五個區域,由左至右亮度值分別為(50、100、150、200、250),讓我們更容易看出不同的差異性。
程式碼如下:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat SrcImg = imread("GradientImg.bmp", CV_LOAD_IMAGE_COLOR);
Mat GrayImg, BinaryImg, BinaryInvImg, BinaryTruncImg, BinaryToZeroImg, BinaryToZeroInvImg;
Mat OtsuImg, TriangleImg, AdaptiveThImg;
cvtColor(SrcImg, GrayImg, CV_BGR2GRAY);
threshold(GrayImg, BinaryImg, 150, 255, THRESH_BINARY);//將大於閥值的灰度值設為最大值,反之設為0
threshold(GrayImg, BinaryInvImg, 150, 255, THRESH_BINARY_INV);//將大於閥值的灰度值設為0,反之設為最大值
threshold(GrayImg, BinaryTruncImg, 190, 255, THRESH_TRUNC);//將大於閥值的灰度值設為閥值,反之則不變
threshold(GrayImg, BinaryToZeroImg, 150, 255, THRESH_TOZERO);//將大於閥值的灰度值不變,反之則設為0
threshold(GrayImg, BinaryToZeroInvImg, 150, 255, THRESH_TOZERO_INV);//將大於閥值的灰度值設為0,反之則不變
threshold(GrayImg, OtsuImg, 0, 255, THRESH_OTSU);//自動設定最佳閥值,適用於有兩個峰值的情況
threshold(GrayImg, TriangleImg, 250, 255, THRESH_TRIANGLE);//自動設定最佳閥值,適用只有一個峰值的情況
adaptiveThreshold(GrayImg, AdaptiveThImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 5, 1);
imshow("GradientImg", SrcImg);
imshow("BinaryImg", BinaryImg);
imshow("BinaryInvImg", BinaryInvImg);
imshow("BinaryTruncImg", BinaryTruncImg);
imshow("BinaryToZeroImg", BinaryToZeroImg);
imshow("BinaryToZeroInvImg", BinaryToZeroInvImg);
imshow("OtsuImg", OtsuImg);
imshow("TriangleImg", TriangleImg);
imshow("AdaptiveThImg", AdaptiveThImg);
waitKey(0);
return 0;
}
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyxTrM9ToQrAMI62eyFkK76kQuJrK2xR4kQCdYtvwyld8B9rT8qokbK321nuFifyju3g0UjwRzo4gt0QJQSEXR99e3-YOxrW4FL_3n3FvH3aXfd7Rc-H5zJqdP3zLTANgzYNoyTjxZm4LT/w410-h307/SrcImg.bmp)
GradientImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_W1_o5XDpn2_mcVKUjQ0hugS0lpyyvHxyVpRU_wMgurAg5yhf0CS_HgqKcRUcDnTSYA18G-CByLLSFIW3O91E0BUNy_XNfgxYoRQfR0emVVCrhX5rywbangMv0xTlLkVonWv1klEgl9q5/w410-h307/BinaryImg.bmp)
BinaryImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbJvua9CAv2aY_rqyQqGrgnfWbimBIo3hw0Rta_HhLDS92B2iZ_dSZ3jrbPqMS66IFRNTe2o1Yn4Fjl4rIvLKUFqPrMJbwyDV71NuepxXQytCHupp7xUyhyphenhyphen-atnjn-3Zt86TIdzsFVTd_x/w410-h307/BinaryInvImg.bmp)
BinaryInvImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKtcGI5VQrl5xFcQEJ3JLokvmtvhAHDJgaaMvwE5qfJH6kzlzt2lcfz2vHqnBzmThzCSp05ZAF_PbRdpGFUcM4vnxlu5aVQ0pVpBlh-bODk_iD4Tj8MdJRbvom1Yx05qNfrGNjZS9o1k9p/w410-h307/BinaryTruncImg.bmp)
BinaryTruncImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnjdns0ouDGaUOsm8vhug3NXCCXTAMDejM-tZ0Txevya9ZEqHnElh1RMflgbfbVjvPMyf8PSB9jbhi8V7Rip2D_7BKR4-6hZi5egJWGnVvyjhSf0iAJ9stQu5JNbErw_OnkDUnP8VLlFxh/w410-h307/BinaryToZeroImg.bmp)
BinaryToZeroImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7iNXGF7YCoC3a8vQWHf5b6JYViHeOIganjN39pCy3Dqn_tunsT71udiq8L3oauipBexbz0kDoGLEC7qGy4SHuwAOawU2LlU02o6Illszi9H1RtL_naVv43qdqSO_dBYMiVXhuvZQybozD/w410-h307/BinaryToZeroInvImg.bmp)
BinaryToZeroInvImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjdPyF3MQdTP0DUq3h78-T_ma0nZE5KgnFtUXlG9xngdRFrxPlocpOIwf297WH9ZKkPGhgNluh9Kqvqcnwl0RUg1J9iSYrlVkw2KNjTPEXzEAc_KiNy7HRpFB1qdd_ofTkMEHcp29Ku4It/w410-h307/OtsuImg.bmp)
OtsuImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAdo7c5GE14YDVtq4CrMCOSZ7s-NeZGqzpP0QZk8H9y2hhpOGNHSFI6YjPK4bUevfoUyj-nfPcD0yhJ1HHN7bgfRsVrWUqumWwdL1C_ioSPHFaJZh-Au7K-YnALwi5Aeb9yzkpBhRgMWC4/w410-h307/TriangleImg.bmp)
TriangleImg
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji-VFnkUUFugwwLKRSdwAOgzaPXwsFNc0cpfFuxgkyGlnUKgXrzFfXnV2i6rGhgSqijKynp_A8HCxIRuf65EAIlmtuLzZxdbLMzq2Re51fbHJJbIyQV0tWWtfSVKe5CCvKHbqXJwyyjrZE/w410-h307/AdaptiveThImg.bmp)
AdaptiveImg
沒有留言:
張貼留言