多语言展示
当前在线:1959今日阅读:27今日分享:41

OpenCV图像自适应阈值二值化及图像平滑处理

OpenCV中对灰度图二值化已封装在函数cvThreshold( const CvArr*  src, CvArr*  dst,double  threshold, double  max_value, int threshold_type );中,通过改变阈值得到不同效果的二值化图像,也可以直接改变参数int threshold_type达到自适应阈值二值化,且效果很不错,再者是使用函数cvSmooth( const CvArr* src, CvArr* dst, int smoothtype CV_DEFAULT(CV_GAUSSIAN), int size1 CV_DEFAULT(3),int size2 CV_DEFAULT(0),double sigma1 CV_DEFAULT(0),double sigma2 CV_DEFAULT(0));对二值化后图像平滑处理。
工具/原料
1

OpenCV开放源代码计算机视觉类库

2

VS2010

方法/步骤
2

工程里包含相应的头文件、命名空间等。//OpenCV图形处理头文件#include #include #include #include #include #include #include #include using namespace std;using namespace cv;

3

将以下代码复制到工程里,即可。//:::::::::::::::::::::;图像的二值化::::::::::::::::::::::::::::// //缩放图像 double fScale = 1; //缩放倍数0.214 CvSize czSize;    //目标图像尺寸CV_LOAD_IMAGE_UNCHANGED // 从文件中加载原图 IplImage *pSrcImage = cvLoadImage('..\\TestPictureData\\15.jpg', CV_LOAD_IMAGE_GRAYSCALE);    IplImage *pDstImage = NULL; //计算目标图像大小 czSize.width = pSrcImage->width * fScale; czSize.height = pSrcImage->height * fScale; //创建图像并缩放 pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels); cvResize(pSrcImage, pDstImage, CV_INTER_AREA); // 创建二值图 g_pBinaryImage = cvCreateImage(cvGetSize(pDstImage), pSrcImage->depth, pSrcImage->nChannels); // 转为二值图 cvThreshold(pDstImage, g_pBinaryImage,0,255,CV_THRESH_OTSU);//使用OTSU自动寻找二值化阈值 //保存图片 cvSaveImage('..\\TestPictureData\\sxt15.jpg', pDstImage); cvSaveImage('..\\TestPictureData\\BI15.jpg', g_pBinaryImage); //二值图像平滑处理,包括其中的多种滤波方法 IplImage *g_pBinaryImage1 = cvCreateImage(cvGetSize(pDstImage), pSrcImage->depth, pSrcImage->nChannels);  cvSmooth(g_pBinaryImage,g_pBinaryImage1,CV_MEDIAN,3,3,0,0); //中值滤波CV_MEDIAN,高斯滤波CV_GAUSSIAN,领域平均滤波CV_BLUR cvSaveImage('..\\TestPictureData\\BI15-1.jpg',g_pBinaryImage1); // 显示原图 cvNamedWindow('原图', CV_WINDOW_AUTOSIZE); cvShowImage('原图', pDstImage); // 创建二值图窗口 cvNamedWindow('二值图', CV_WINDOW_AUTOSIZE); // 显示二值图 cvShowImage('二值图', g_pBinaryImage1); cvWaitKey(0); cvDestroyWindow('原图'); //cvDestroyWindow(pstrWindowsSrcTitle); cvDestroyWindow('二值图'); //cvReleaseImage(&pSrcImage);// cvReleaseImage(&contoursImage); cvReleaseImage(&g_pBinaryImage1); cvReleaseImage(&pDstImage);

注意事项

OpenCV二值化图像,函数cvThreshold传入的是灰度图,否则将出错,这里在加载图像时可选择以灰度图加载IplImage *pSrcImage = cvLoadImage('..\\TestPictureData\\15.jpg', CV_LOAD_IMAGE_GRAYSCALE);

推荐信息