#include <opencv2/opencv.hpp>
using namespace std;
const char *binaryWindowsName = "二值图";
//const double S = 50;
//const double b = 5;
//double f = 0.0;
//double f2 = 0.0;
IplImage *srcImage = NULL;
IplImage *grayImage = NULL;
IplImage *binaryImage = NULL;
int main()
{
CvCapture *cap = cvCreateCameraCapture(0);
if(!cap)
{
cerr<<"Error!"<<endl;
exit(-1);
}
IplImage *tempImage = cvQueryFrame(cap);
CvSize size = cvSize(
(int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT)
);
srcImage = cvCreateImage(size, IPL_DEPTH_8U, 3);
cvNamedWindow(binaryWindowsName, CV_WINDOW_AUTOSIZE);
while((tempImage = cvQueryFrame(cap)) != NULL)
{
cvCopy(tempImage, srcImage);
if(srcImage->origin == IPL_ORIGIN_TL)
cvFlip(srcImage, srcImage);
grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
cvCvtColor(srcImage, grayImage, CV_BGR2GRAY);
binaryImage = cvCreateImage(cvGetSize(grayImage), IPL_DEPTH_8U, 1);
cvThreshold(grayImage, binaryImage, 250, 255, CV_THRESH_BINARY);
cvShowImage(binaryWindowsName, binaryImage);
char c = cvWaitKey(44);
if(c == 27) break;
}
cvReleaseImage(&srcImage);
cvReleaseImage(&grayImage);
cvDestroyWindow(binaryWindowsName);
return 0;
}
图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。
将256个亮度等级的灰度图像通过适当的阈值(threshold)选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像
。
所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。