OpenCV學習之旅二:二值化圖片

二值化處理時圖像處理最基礎的步驟:將圖像上的像素點的灰度值設置爲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;
}

 

原圖:

二值化圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章