utils.hpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. #ifndef _UTILS_H_
  42. #define _UTILS_H_
  43. namespace cv {
  44. int validateToInt(size_t step);
  45. template <typename _Tp> static inline
  46. size_t safeCastToSizeT(const _Tp v_origin, const char* msg)
  47. {
  48. const size_t value_cast = (size_t)v_origin;
  49. if ((_Tp)value_cast != v_origin)
  50. CV_Error(cv::Error::StsError, msg ? msg : "Can't cast value into size_t");
  51. return value_cast;
  52. }
  53. struct PaletteEntry
  54. {
  55. unsigned char b, g, r, a;
  56. };
  57. #define WRITE_PIX( ptr, clr ) \
  58. (((uchar*)(ptr))[0] = (clr).b, \
  59. ((uchar*)(ptr))[1] = (clr).g, \
  60. ((uchar*)(ptr))[2] = (clr).r)
  61. #define descale(x,n) (((x) + (1 << ((n)-1))) >> (n))
  62. #define saturate(x) (uchar)(((x) & ~255) == 0 ? (x) : ~((x)>>31))
  63. void icvCvt_BGR2Gray_8u_C3C1R( const uchar* bgr, int bgr_step,
  64. uchar* gray, int gray_step,
  65. Size size, int swap_rb=0 );
  66. void icvCvt_BGRA2Gray_8u_C4C1R( const uchar* bgra, int bgra_step,
  67. uchar* gray, int gray_step,
  68. Size size, int swap_rb=0 );
  69. void icvCvt_BGRA2Gray_16u_CnC1R( const ushort* bgra, int bgra_step,
  70. ushort* gray, int gray_step,
  71. Size size, int ncn, int swap_rb=0 );
  72. void icvCvt_Gray2BGR_8u_C1C3R( const uchar* gray, int gray_step,
  73. uchar* bgr, int bgr_step, Size size );
  74. void icvCvt_Gray2BGR_16u_C1C3R( const ushort* gray, int gray_step,
  75. ushort* bgr, int bgr_step, Size size );
  76. void icvCvt_BGRA2BGR_8u_C4C3R( const uchar* bgra, int bgra_step,
  77. uchar* bgr, int bgr_step,
  78. Size size, int swap_rb=0 );
  79. void icvCvt_BGRA2BGR_16u_C4C3R( const ushort* bgra, int bgra_step,
  80. ushort* bgr, int bgr_step,
  81. Size size, int _swap_rb );
  82. void icvCvt_BGR2RGB_8u_C3R( const uchar* bgr, int bgr_step,
  83. uchar* rgb, int rgb_step, Size size );
  84. #define icvCvt_RGB2BGR_8u_C3R icvCvt_BGR2RGB_8u_C3R
  85. void icvCvt_BGR2RGB_16u_C3R( const ushort* bgr, int bgr_step,
  86. ushort* rgb, int rgb_step, Size size );
  87. #define icvCvt_RGB2BGR_16u_C3R icvCvt_BGR2RGB_16u_C3R
  88. void icvCvt_BGRA2RGBA_8u_C4R( const uchar* bgra, int bgra_step,
  89. uchar* rgba, int rgba_step, Size size );
  90. #define icvCvt_RGBA2BGRA_8u_C4R icvCvt_BGRA2RGBA_8u_C4R
  91. void icvCvt_BGRA2RGBA_16u_C4R( const ushort* bgra, int bgra_step,
  92. ushort* rgba, int rgba_step, Size size );
  93. #define icvCvt_RGBA2BGRA_16u_C4R icvCvt_BGRA2RGBA_16u_C4R
  94. void icvCvt_BGR5552Gray_8u_C2C1R( const uchar* bgr555, int bgr555_step,
  95. uchar* gray, int gray_step, Size size );
  96. void icvCvt_BGR5652Gray_8u_C2C1R( const uchar* bgr565, int bgr565_step,
  97. uchar* gray, int gray_step, Size size );
  98. void icvCvt_BGR5552BGR_8u_C2C3R( const uchar* bgr555, int bgr555_step,
  99. uchar* bgr, int bgr_step, Size size );
  100. void icvCvt_BGR5652BGR_8u_C2C3R( const uchar* bgr565, int bgr565_step,
  101. uchar* bgr, int bgr_step, Size size );
  102. void icvCvt_CMYK2BGR_8u_C4C3R( const uchar* cmyk, int cmyk_step,
  103. uchar* bgr, int bgr_step, Size size );
  104. void icvCvt_CMYK2RGB_8u_C4C3R( const uchar* cmyk, int cmyk_step,
  105. uchar* rgb, int rgb_step, Size size );
  106. void icvCvt_CMYK2Gray_8u_C4C1R( const uchar* ycck, int ycck_step,
  107. uchar* gray, int gray_step, Size size );
  108. void FillGrayPalette( PaletteEntry* palette, int bpp, bool negative = false );
  109. bool IsColorPalette( PaletteEntry* palette, int bpp );
  110. void CvtPaletteToGray( const PaletteEntry* palette, uchar* grayPalette, int entries );
  111. uchar* FillUniColor( uchar* data, uchar*& line_end, int step, int width3,
  112. int& y, int height, ptrdiff_t count3, PaletteEntry clr );
  113. uchar* FillUniGray( uchar* data, uchar*& line_end, int step, int width3,
  114. int& y, int height, ptrdiff_t count3, uchar clr );
  115. uchar* FillColorRow8( uchar* data, uchar* indices, int len, PaletteEntry* palette );
  116. uchar* FillGrayRow8( uchar* data, uchar* indices, int len, uchar* palette );
  117. uchar* FillColorRow4( uchar* data, uchar* indices, int len, PaletteEntry* palette );
  118. uchar* FillGrayRow4( uchar* data, uchar* indices, int len, uchar* palette );
  119. uchar* FillColorRow1( uchar* data, uchar* indices, int len, PaletteEntry* palette );
  120. uchar* FillGrayRow1( uchar* data, uchar* indices, int len, uchar* palette );
  121. CV_INLINE bool isBigEndian( void )
  122. {
  123. #ifdef WORDS_BIGENDIAN
  124. return true;
  125. #else
  126. return false;
  127. #endif
  128. }
  129. } // namespace
  130. #endif/*_UTILS_H_*/