#include "cv.h"
#include "highgui.h"
#include "stdio.h"
int main()
{
IplImage* img = cvLoadImage( "homework_3-7.jpg" );
IplImage* clone1, *clone2;
IplImage* dst = cvCreateImage( cvGetSize(img), img->depth, 1 ); //创建一与原图像img大小和数据类型上一致、单通道的图像dst
cvNamedWindow( "homework_3-7", CV_WINDOW_AUTOSIZE );
cvSplit( img, dst, 0, 0, 0 ); //将img图像分割至dst,NULL,NULL,NULL中
// cvShowImage( "homework_3-6", dst );
clone1 = cvCloneImage( dst ); //克隆dst两次
clone2 = cvCloneImage( dst );
double max, min;
cvMinMaxLoc( dst, &min, &max ); //将dst中的最小值、最大值分别写入min,max
double thresh = ( max - min )/2;
printf( "max = %f\nmin = %f\nthresh = %f\n", max, min, thresh );
cvSet( clone1, cvScalar( thresh )); //利用内联函数cvScalar为结构体CvScalar赋值thresh,利用cvSet将clone1的所有通道所有值设置为thresh
cvZero( clone2 );
cvCmp( dst, clone1, clone2, CV_CMP_GE ); //compare函数,比较dst与clone1,若dst>=clone1,则该点写入clone2
cvSubS( dst, cvScalar( thresh/2 ), dst, clone2 );
/*若dst < clone1的点,则dst减去thresh/2,即整个程序作用是将dst中的某点小于dst所有点的中间值/2,则该点减去该中间值thresh/2*/
cvShowImage( "homework_3-7", dst );
cvWaitKey( 0 );
cvReleaseImage( &dst );
return 0;
}
《学习OpenCV》练习3-7
最新推荐文章于 2025-07-19 17:43:21 发布