所谓阈值化,是用来剔除一些低于或高于一定值的的像素
void sum_rgb(IplImage*src,IplImage*dst){
IplImage*r=cvCreateImage(cvGetSize(src),src->depth,1);
IplImage*g=cvCreateImage(cvGetSize(src),src->depth,1);
IplImage*b=cvCreateImage(cvGetSize(src),src->depth,1);
cvSplit(src,r,g,b,NULL);//将多通道组分割成多个单通道组
IplImage*s=cvCreateImage(cvGetSize(src),src->depth,1);
cvAddWeighted(r,1./3.,g,1./3.,0.0,s);//融合操作,s=(r*1/3)+(g*1/3)+(0.0)
cvAddWeighted(s,2./3.,b,1./3.,0.0,s);
//阈值化,用来剔除一些高于或低于一定值的像素
cvNamedWindow("二值阈值化.jpg",1);//当像素值大于threshold取最大值,否则设置为0
cvThreshold(s,dst,100,100,CV_THRESH_BINARY);
cvShowImage("二值阈值化.jpg",dst);
cvNamedWindow("截断阈值化.jpg",1);//超过threshold的像素设置为threshold
cvThreshold(s,dst,100,100,CV_THRESH_TRUNC);
cvShowImage("截断阈值化.jpg",dst);
cvNamedWindow("超过阈值被置为0.jpg",1);
cvThreshold(s,dst,100,100,CV_THRESH_TOZERO_INV);
cvShowImage("超过阈值被置为0.jpg",dst);
cvWaitKey(0);
cvReleaseImage(&r);
cvReleaseImage(&g);
cvReleaseImage(&b);
cvDestroyAllWindows();
}
int main(int argc,int **argv){
IplImage*src=cvLoadImage("3.jpg");
IplImage*dst=cvCreateImage(cvGetSize(src),src->depth,1);
sum_rgb(src,dst);
while(1){
if((cvWaitKey(10)&0x7f)==27)
break;
}
cvDestroyWindow("1.jpg");
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}