Image.h
上传用户:lijia5631
上传日期:2008-11-10
资源大小:1214k
文件大小:5k
源码类别:

视频捕捉/采集

开发平台:

MultiPlatform

  1. /**
  2.   * cubicles
  3.   *
  4.   * This is an implementation of the Viola-Jones object detection 
  5.   * method and some extensions.  The code is mostly platform-
  6.   * independent and uses only standard C and C++ libraries.  It
  7.   * can make use of MPI for parallel training and a few Windows
  8.   * MFC functions for classifier display.
  9.   *
  10.   * Mathias Kolsch, matz@cs.ucsb.edu
  11.   *
  12.   * $Id: Image.h,v 1.24 2005/01/06 06:53:53 matz Exp $
  13. **/
  14. // Image.h: declarations for a simple image container class
  15. //
  16. ////////////////////////////////////////////////////////////////////
  17. //
  18. // By downloading, copying, installing or using the software you 
  19. // agree to this license.  If you do not agree to this license, 
  20. // do not download, install, copy or use the software.
  21. //
  22. // Copyright (C) 2004, Mathias Kolsch, all rights reserved.
  23. // Third party copyrights are property of their respective owners.
  24. //
  25. // Redistribution and use in binary form, with or without 
  26. // modification, is permitted for non-commercial purposes only.
  27. // Redistribution in source, with or without modification, is 
  28. // prohibited without prior written permission.
  29. // If granted in writing in another document, personal use and 
  30. // modification are permitted provided that the following two
  31. // conditions are met:
  32. //
  33. // 1.Any modification of source code must retain the above 
  34. //   copyright notice, this list of conditions and the following 
  35. //   disclaimer.
  36. //
  37. // 2.Redistribution's in binary form must reproduce the above 
  38. //   copyright notice, this list of conditions and the following 
  39. //   disclaimer in the documentation and/or other materials provided
  40. //   with the distribution.
  41. //
  42. // This software is provided by the copyright holders and 
  43. // contributors "as is" and any express or implied warranties, 
  44. // including, but not limited to, the implied warranties of 
  45. // merchantability and fitness for a particular purpose are 
  46. // disclaimed.  In no event shall the copyright holder or 
  47. // contributors be liable for any direct, indirect, incidental, 
  48. // special, exemplary, or consequential damages (including, but not 
  49. // limited to, procurement of substitute goods or services; loss of 
  50. // use, data, or profits; or business interruption) however caused
  51. // and on any theory of liability, whether in contract, strict 
  52. // liability, or tort (including negligence or otherwise) arising 
  53. // in any way out of the use of this software, even if advised of 
  54. // the possibility of such damage.
  55. //
  56. ////////////////////////////////////////////////////////////////////
  57. #ifndef __IMAGE_H
  58. #define __IMAGE_H
  59. #include <stdio.h>
  60. #include <string>
  61. #include <vector>
  62. #include "Exceptions.h"
  63. #include "Rect.h"
  64. #ifdef DEBUG
  65. #ifdef ASSERT
  66. #undef ASSERT
  67. #endif
  68. #define ASSERT(x) 
  69.   if (!(x)) { 
  70.     printf("%s, line %d: assertion (%s) failedn", __FILE__, __LINE__, #x); 
  71.     throw ITException("assertion failed"); 
  72.   }
  73. #else  // DEBUG
  74. #define ASSERT(x)  ((void)0)
  75. #endif
  76. #ifdef DEBUG
  77. extern bool g_printlots;
  78. #endif // DEBUG
  79. // ----------------------------------------------------------------------
  80. // class CByteImage
  81. // ----------------------------------------------------------------------
  82. //namespace { // cubicles
  83. typedef unsigned char BYTE;
  84. typedef vector<BYTE> CBYTEVector;
  85. class CByteImage {
  86.  public:
  87.   CByteImage();
  88.   CByteImage(int width, int height);
  89.   CByteImage(BYTE* pData, int width, int height);
  90.   ~CByteImage();
  91.   void Allocate(int width, int height);
  92.   void Deallocate();
  93.   void Copy(const CByteImage& from);
  94.   void CopyArea(const CByteImage& from, const CRect& from_area, 
  95.     int new_width, int new_height);
  96.   int Width() const {return m_width;}
  97.   int Height() const {return m_height;}
  98.   const BYTE* GetData() const {return m_pData;}
  99.   BYTE Pixel(int x, int y) const;
  100.   BYTE& Pixel(int x, int y);
  101.   
  102.   void WriteToFile(FILE* fp);
  103.   void ReadFromFile(FILE* fp);
  104.   void ImportFromFile(string filename) throw (ITEFile);
  105.   void ExportToFile(string filename) throw (ITEFile);
  106.   void Rotate(double degrees, int xCenter, int yCenter);
  107.   void Crop(const CRect& area);
  108.   double InterpolateNearestNeighbor(double x, double y) const;
  109.   double InterpolateLinear(double x, double y) const;
  110.   void Standardize(int ip_method);
  111. #ifdef USE_MFC
  112. mutable struct {
  113. BITMAPINFOHEADER header;
  114. unsigned long pMap[256];
  115. } m_bmi;
  116.   void PrepareDIB();
  117.   void SetBitsToDevice(CDC* pDC) const;
  118. #endif // USE_MFC
  119.   
  120.  private:
  121.   CBYTEVector  m_data;
  122.   BYTE*  m_pData; // always must point to &m_data[0] or NULL
  123.   bool   m_data_is_local;
  124.   int    m_width;
  125.   int    m_height;
  126. };
  127. // inlined function
  128. #ifndef DEBUG
  129. inline BYTE CByteImage::Pixel(int x, int y) const {return m_pData[x + y*m_width];}
  130. inline BYTE& CByteImage::Pixel(int x, int y) {return m_pData[x + y*m_width];}
  131. #endif
  132. /////////////////////////////////////////////////////////////////////////////
  133. // Helper functions, implementation in StringUtils.cpp
  134. void getline_crlf(istream& is, string& line);
  135. void ReplaceAll(string& mangle, const string what, const string with);
  136. void RemoveCR(string& str);
  137. #ifdef WIN32
  138. // in cubicles/StringUtils.cpp
  139. string ConvertPathToWindows(const string& filename);
  140. string ConvertPathToStandard(const string& win_filename);
  141. #endif // WIN32
  142. //} // namespace cubicles
  143. #endif // __IMAGE_H