openCV/第五章 图像处理--阈值化(非自适应)

阈值化用来直接诶剔除一些低于或高于一定值的像素

基本思想:给定一个数组和一个阈值,然后根据数组中的每个元素的值是低于还是高于阈值而进行一些处理

函数:cvThreshold()

double cvThreshold(){

   cvArr* src,

   cvArr* dst,

   double threshold,

   double max_value,

   int threshold_type,

};

 

例子:对图像中的三个通道求和,然后在值100处对结果进行截断。

 

#include <stdio.h> #include <cv.h> #include <highgui.h> #include <cxcore.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 ); cvReleaseImage( &r ); cvReleaseImage( &g ); cvReleaseImage( &b ); cvReleaseImage( &s ); } void main() { cvNamedWindow( "cvThreshold", 1 ); cvNamedWindow( "src", 1 ); IplImage* src = cvLoadImage("D://picutures//诗音3.jpg"); IplImage* dst = cvCreateImage(cvGetSize( src ), src->depth, 1); sum_rgb( src, dst ); cvShowImage( "src", src ); cvShowImage( "cvThreshold", dst ); while( 1 ) { if( cvWaitKey( 10 ) ==27 ) break; } cvDestroyWindow( "cvThreshold" ); cvReleaseImage( &src ); cvReleaseImage( &dst ); }

 

结果:openCV/第五章 图像处理--阈值化(非自适应)_第1张图片

 

你可能感兴趣的:(null,DST,图像处理)