阈值处理:
一、函数定义:
double cvThreshold(
CvArr* src,//输入图像
CvArr* dst,//输出图像
double threshold,//阈值
double max_value,//最大值
int threshold_type//阈值类型
);
阈值类型: 操作
CV_THRESH_BINARY dst=(src>T)?M:0
CV_THRESH_BINARY_INV dst=(src>T)?0:M
CV_THRESH_TRUNC dst=(src>T)?M:src
CV_THRESH_TOZERO dst=(src>T)?src:0
CV_THRESH_TOZERO_INV dst=(src>T)?0:src
二、例程
//WIN7+VS2012+OPENCV2.4.7
//cvThreshold
//double cvThreshold(
// CvArr* src,//输入图像
// CvArr* dst,//输出图像
// double threshold,//阈值
// double max_value,//最大值
// int threshold_type//阈值类型
// );
#include<cv.h>
#include<highgui.h>
#include<stdio.h>
void sum_rgb(IplImage* src,IplImage* dst)
{
//
IplImage* r=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* g=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* b=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
//
cvSplit(src,r,g,b,NULL);
//
IplImage* s=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
//
cvAddWeighted(r,1./3.,g,1./3.,0.0,s);
cvAddWeighted(s,2./3.,b,1./3.,0.0,s);
//
//cvThreshold(s,dst,100,100,CV_THRESH_TRUNC);
//cvThreshold(s,dst,100,100,CV_THRESH_BINARY);
//cvThreshold(s,dst,100,100,CV_THRESH_BINARY_INV);
//cvThreshold(s,dst,100,100,CV_THRESH_TOZERO);
cvThreshold(s,dst,100,100,CV_THRESH_TOZERO_INV);
cvReleaseImage(&r);
cvReleaseImage(&g);
cvReleaseImage(&b);
cvReleaseImage(&s);
}
int main(int argc,char** argv)
{
cvNamedWindow(argv[1],1);
//
IplImage* src=cvLoadImage(argv[1]);
IplImage* dst=cvCreateImage(cvGetSize(src),src->depth,1);
sum_rgb(src,dst);
cvShowImage(argv[1],dst);
cvWaitKey(0);
cvDestroyWindow(argv[1]);
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
三、运行结果:
输入图像:
CV_THRESH_TRUNC
CV_THRESH_BINARY
CV_THRESH_BINARY_INV
CV_THRESH_TOZERO
CV_THRESH_TOZERO_INV