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);

有时候,匹配要结合位置,所以之匹配的目标不一定是真正的目标。所以要求roi的最小值,这样写结果总不对,后来才发现,原来结果min_loc是roi的坐标,还要反算出原图的坐标。

你可能感兴趣的:(OpenCV)