二值化處理時圖像處理最基礎的步驟:將圖像上的像素點的灰度值設置爲0 或255
(1)先對彩色圖像進行灰度化
//img爲原圖,imgGray爲灰度圖
cvtColor(img, imgGray, CV_BGR2GRAY);
(2)對灰度圖進行二值化
第一種:使用threshold函數
//imgGray爲灰度圖,result爲二值圖像
//100~255爲閾值,可以根據情況設定
//在閾值中的像素點將變爲0(白色部分),閾值之外的像素將變爲1(黑色部分)。
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);
thresholdtype
cv::THRESH_BINARY //二值化閾值
cv::THRESH_BINARY_INV //反二值化閾值
第二種:使用adaptiveThreshold函數(這個對明暗更明顯)
//imgGray爲灰度圖,result爲二值圖像
//255爲最大閾值,可以根據情況設定
//在閾值中的像素點將變爲0(白色部分),閾值之外的像素將變爲1(黑色部分)。
//BLOCK_SIZE:區塊大小
//offset:不變
adaptiveThreshold(imgGray,result, 255,adaptive_method, CV_THRESH_BINARY,block_size,offset);
adaptivemethod
cv::ADAPTIVE_THRESH_MEAN_C //均值時取得權值相等
CV::ADAPTIVE_THRSH_GAUSSIAN_C //(x,y)周圍的像素的權值則根據其到中心點的距離通過高斯方程得到
程序實現
#include<iostream>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img, imgGray,result;
img = imread("C:\\Users\\shawn\\Pictures\\Saved Pictures\\1.JPG");
if (!img.data) {
cout << "Please input image path" << endl;
return 0;
}
imshow("原圖", img);
cvtColor(img, imgGray, CV_BGR2GRAY);
imshow("灰度圖", imgGray);
threshold(imgGray, result, 100, 255, CV_THRESH_BINARY);
imshow("二值化後的圖", result);
waitKey(); //用來看圖
return 0;
}
原圖:
二值化圖