cvMinMaxLoc函数实例

cvMinMaxLoc()找出图片或一组数据中最大值及最小值的数据,以及最大值及最小值的位置,第一个引数为输入IplImage资料结构或CvMat资料结构,第二个引数为输出最小值double型别数据,第三个引数为输出最大值double型别数据,第四个引数为输出最小值位置CvPoint资料结构,第五个引数为输出最大值位置CvPoint资料结构.找出图片或一组数据中最大值及最小值的数据,以及最大值及最小值的位置,第一个引数为输入IplImage资料结构或CvMat资料结构,第二个引数为输出最小值double型别数据,第三个引数为输出最大值double型别数据,第四个引数为输出最小值位置CvPoint资料结构,第五个引数为输出最大值位置CvPoint资料结构. cvMinMaxLoc(输入IplImage或CvMat资料结构,输出double型别最小值数据,输出double型别最大值数据,输出最小值CvPoint资料结构,输出最大值CvPoint资料结构) cvMinMaxLoc(输入IplImage或CvMat资料结构,输出double型别最小值数据,输出double型别最大值数据,输出最小值CvPoint资料结构,输出最大值CvPoint资料结构)。

cvMinMaxLoc()的實作
#include
#include
#include

int main()
{
IplImage *Image1=cvLoadImage("grotto.jpg" ,1 );

double MinValue;
double MaxValue;

CvPoint MinLocation;
CvPoint MaxLocation;

cvSetImageCOI(Image1,1 );
cvMinMaxLoc(Image1,& MinValue,& MaxValue,& MinLocation,& MaxLocation);

printf("The Min number is : %.f/n" ,MinValue);
printf("The position is : ( %d , %d )/n" ,MinLocation.x,MinLocation.y);
printf("The Max number is : %.f/n" ,MaxValue);
printf("The position is : (%d , %d )/n" ,MaxLocation.x,MaxLocation.y);

cvNamedWindow("grotto" ,1 );
cvShowImage("grotto" ,Image1);
cvWaitKey(0 );
}
上面的结果是抓出这张图片最大最小值的数据,选择绿色这个通道,虽然这已经不算是极端值的意义了,不过它仍然是可以对一般图形做处理,cvMinMaxLoc()可以同时找出最大最小值,也可以指出最大值的位置跟最小值的位置,而cvMinMaxLoc()必须对单通道做处理因此必须要用,cvSetImageCOI选定颜色,也可以支援ROI,甚至,cvMinMaxLoc()可以用遮罩的方式实作,使用的方法如下: #include
#include
#include

int main()
{
IplImage *Image1=cvLoadImage( "grotto.jpg" , 1 );
IplImage *MaskImage1=cvLoadImage( "grotto_Threshold.bmp" , 0 );
double MinValue;
double MaxValue;

CvPoint MinLocation;
CvPoint MaxLocation;

cvSetImageCOI(Image1, 1 );
cvMinMaxLoc(Image1, & MinValue, & MaxValue, & MinLocation, & MaxLocation,MaskImage1);

printf( "The Min number is : %.f/n" ,MinValue);
printf( "The position is : ( %d , %d )/n" ,MinLocation.x,MinLocation.y);
printf( "The Max number is : %.f/n" ,MaxValue);
printf( "The position is : (%d , %d )/n" ,MaxLocation.x,MaxLocation.y);

cvNamedWindow( "grotto" , 1 );
cvShowImage( "grotto" ,Image1);
cvWaitKey( 0 );
} 上面的程式也只對grotto_Threshold.bmp白色的部份做處理,從白色區域找出它的最大最小值以及它的位置,跟前面的程式差不多.
//
原来cvminmaxloc的roi是这样的: cvSetImageROI(result,resultrect);
cvMinMaxLoc(result, &min_val, &max_val,&min_loc,&max_loc, NULL );
center.x=min_loc.x-(int)objsize/2; center.y=min_loc.y-(int)objsize/2;
cvResetImageROI(result);
【cvMinMaxLoc函数实例】有时候,匹配要结合位置,所以之匹配的目标不一定是真正的目标。所以要求roi的最小值,这样写结果总不对,后来才发现,原来结果min_loc是roi的坐标,还要反算出原图的坐标。

    推荐阅读