本文列出了三种阈值化方法(最优阈值化、otsu、自适应阈值化)
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
VideoCapture capture(0); //capture the video from web cam
if (!capture.isOpened()) // if not success, exit program
{
cout << "Cannot open the web cam" << endl;
return -1;
}
namedWindow("original");
//capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度
//capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
//capture.set(CV_CAP_PROP_FPS, 30);//帧数
capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度
//capture.set(CV_CAP_PROP_CONTRAST,40);//对比度
//capture.set(CV_CAP_PROP_SATURATION, 50);//饱和度
//capture.set(CV_CAP_PROP_HUE, 50);//色调
capture.set(CV_CAP_PROP_EXPOSURE, -5);//曝光
while (1)
{
Mat original;
capture >> original;
if (original.empty())
continue;
cvtColor(original,original,CV_BGR2GRAY);
//otsu阈值化
Mat ostu_threshold;
threshold(original, ostu_threshold, 122, 255, THRESH_BINARY | THRESH_OTSU); //函数将忽略传入的阈值122
//自适应阈值化
Mat adaptive_threshold;
int blockSize = 9;
adaptiveThreshold(original, adaptive_threshold, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, blockSize, 0);
//最优阈值化
Mat biggest_threshold;
threshold(original, biggest_threshold, 122, 255, THRESH_BINARY);
imshow("original", adaptive_threshold);
waitKey(1);
}
return 0;
}