Home | History | Annotate | Download | only in src
      1 /*M///////////////////////////////////////////////////////////////////////////////////////
      2 //
      3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
      4 //
      5 //  By downloading, copying, installing or using the software you agree to this license.
      6 //  If you do not agree to this license, do not download, install,
      7 //  copy or use the software.
      8 //
      9 //
     10 //                        Intel License Agreement
     11 //                For Open Source Computer Vision Library
     12 //
     13 // Copyright (C) 2000, Intel Corporation, all rights reserved.
     14 // Third party copyrights are property of their respective owners.
     15 //
     16 // Redistribution and use in source and binary forms, with or without modification,
     17 // are permitted provided that the following conditions are met:
     18 //
     19 //   * Redistribution's of source code must retain the above copyright notice,
     20 //     this list of conditions and the following disclaimer.
     21 //
     22 //   * Redistribution's in binary form must reproduce the above copyright notice,
     23 //     this list of conditions and the following disclaimer in the documentation
     24 //     and/or other materials provided with the distribution.
     25 //
     26 //   * The name of Intel Corporation may not be used to endorse or promote products
     27 //     derived from this software without specific prior written permission.
     28 //
     29 // This software is provided by the copyright holders and contributors "as is" and
     30 // any express or implied warranties, including, but not limited to, the implied
     31 // warranties of merchantability and fitness for a particular purpose are disclaimed.
     32 // In no event shall the Intel Corporation or contributors be liable for any direct,
     33 // indirect, incidental, special, exemplary, or consequential damages
     34 // (including, but not limited to, procurement of substitute goods or services;
     35 // loss of use, data, or profits; or business interruption) however caused
     36 // and on any theory of liability, whether in contract, strict liability,
     37 // or tort (including negligence or otherwise) arising in any way out of
     38 // the use of this software, even if advised of the possibility of such damage.
     39 //
     40 //M*/
     41 
     42 
     43 #ifndef __CVVECTRACK_H__
     44 #define __CVVECTRACK_H__
     45 
     46 #include <string.h>
     47 #include <math.h>
     48 #include <time.h>
     49 #include <stdio.h>
     50 
     51 #undef max
     52 #undef min
     53 
     54 #define max(a,b) ((a)<(b) ? (b) : (a))
     55 #define min(a,b) ((a)>(b) ? (a) : (b))
     56 
     57 inline int pow2(int v)
     58 {
     59         return (v*v);
     60 }
     61 
     62 inline int operator == (const CvRect& r1, const CvRect& r2)
     63 {
     64         return (r1.x == r2.x) && (r1.y == r2.y) &&
     65                         (r1.width == r2.width) && (r1.height == r2.height);
     66 }
     67 
     68 inline int operator != (const CvRect& r1, const CvRect& r2)
     69 {
     70         return !(r1 == r2);
     71 }
     72 
     73 inline
     74 int CmpPoints(const CvPoint& p1, const CvPoint& p2, int err)
     75 {
     76         /* Simakov: modify __max to max */
     77         return (max(abs(p1.x - p2.x), abs(p1.y - p2.y)) < err);
     78 }
     79 
     80 inline
     81 int PointInRect(const CvPoint& p, const CvRect& r)
     82 {
     83         return ((p.x > r.x) && (p.x < (r.x + r.width)) &&
     84                         (p.y > r.y) && (p.y < (r.y + r.height)));
     85 }
     86 
     87 inline
     88 int RectInRect(const CvRect& r1, const CvRect& r2)
     89 {
     90         CvPoint plt = {r1.x, r1.y};
     91         CvPoint prb = {r1.x + r1.width, r1.y + r1.height};
     92         return (PointInRect(plt, r2) && PointInRect(prb, r2));
     93 }
     94 
     95 inline
     96 CvRect Increase(const CvRect& r, int decr)
     97 {
     98         CvRect rect;
     99         rect.x = r.x * decr;
    100         rect.y = r.y * decr;
    101         rect.width = r.width * decr;
    102         rect.height = r.height * decr;
    103         return rect;
    104 }
    105 
    106 inline
    107 CvPoint Increase(const CvPoint& p, int decr)
    108 {
    109         CvPoint point;
    110         point.x = p.x * decr;
    111         point.y = p.y * decr;
    112         return point;
    113 }
    114 
    115 inline
    116 void Move(CvRect& r, int dx, int dy)
    117 {
    118         r.x += dx;
    119         r.y += dy;
    120 }
    121 
    122 inline
    123 void Move(CvPoint& p, int dx, int dy)
    124 {
    125         p.x += dx;
    126         p.y += dy;
    127 }
    128 
    129 inline
    130 void Extend(CvRect& r, int d)
    131 {
    132         r.x -= d;
    133         r.y -= d;
    134         r.width += 2*d;
    135         r.height += 2*d;
    136 }
    137 
    138 inline
    139 CvPoint Center(const CvRect& r)
    140 {
    141         CvPoint p;
    142         p.x = r.x + r.width / 2;
    143         p.y = r.y + r.height / 2;
    144         return p;
    145 }
    146 
    147 inline void ReallocImage(IplImage** ppImage, CvSize sz, long lChNum)
    148 {
    149     IplImage* pImage;
    150     if( ppImage == NULL )
    151                 return;
    152     pImage = *ppImage;
    153     if( pImage != NULL )
    154     {
    155         if (pImage->width != sz.width || pImage->height != sz.height || pImage->nChannels != lChNum)
    156             cvReleaseImage( &pImage );
    157     }
    158     if( pImage == NULL )
    159         pImage = cvCreateImage( sz, IPL_DEPTH_8U, lChNum);
    160     *ppImage = pImage;
    161 }
    162 
    163 #endif //__VECTRACK_H__
    164