cvutImage.h
上传用户:jiayuled
上传日期:2020-03-04
资源大小:9338k
文件大小:5k
源码类别:

OpenCV

开发平台:

C/C++

  1. #ifndef CVUT_IMAGE_H
  2. #define CVUT_IMAGE_H
  3. #include "cv.h"
  4. #include "highgui.h"
  5. #include <iostream>
  6. #include <string>
  7. using namespace std;
  8. namespace cvutImage {
  9. /************************************************************************
  10. class Image
  11. *************************************************************************/
  12. template <typename T>
  13. class Image {
  14. public:
  15. IplImage* cvimage;
  16. int height;
  17. int width;
  18. int channels;
  19. bool is_show;
  20. char* window_name;
  21. public:
  22. /***********************************************************************
  23.                         constructor
  24. ***********************************************************************/
  25. Image(int width,int height, int depth, int channels )  {
  26. cvimage = cvCreateImage(cvSize(width,height),depth,channels);
  27. if (cvimage == NULL) {
  28. cerr<<"fail to create image!n";
  29. exit(1);
  30. }
  31. this->width = width;
  32. this->height = height;
  33. this->channels = channels;
  34. is_show=false;
  35. window_name="";
  36. };
  37. Image(CvSize size, int depth, int channels ) {
  38. cvimage = cvCreateImage(size,depth,channels);
  39. if (cvimage == NULL) {
  40. cerr<<"fail to create image!n";
  41. exit(1);
  42. }
  43. width = cvimage->width;
  44. height = cvimage->height;
  45. this->channels = channels;
  46. is_show=false;
  47. window_name="";
  48. };
  49. Image(Image<T>& src) {
  50. cvimage = cvCloneImage(src.cvimage);
  51. if (cvimage == NULL) {
  52. cerr<<"fail to clone image!n";
  53. exit(1);
  54. }
  55. width = cvimage->width;
  56. height = cvimage->height;
  57. channels = src.channels;
  58. is_show=false;
  59. window_name="";
  60. };
  61. Image(const char* name) {
  62. cvimage = cvLoadImage( name, 1);
  63. if (cvimage == NULL) {
  64. cerr<<"fail to load image!n";
  65. exit(1);
  66. }
  67. if (cvimage->widthStep/cvimage->width/cvimage->nChannels != sizeof(T))
  68. {
  69. cerr<<"image type unmatch!n";
  70. exit(1);
  71. }
  72. width = cvimage->width;
  73. height = cvimage->height;
  74. channels = cvimage->nChannels;
  75. is_show = false;
  76. window_name="";
  77. };
  78. Image(const string name) {
  79. cvimage = cvLoadImage( name.c_str(), 1);
  80. if (cvimage == NULL) {
  81. cerr<<"fail to load image!n";
  82. exit(1);
  83. }
  84. if (cvimage->widthStep/cvimage->width/cvimage->nChannels != sizeof(T))
  85. {
  86. cerr<<"image type unmatch!n";
  87. exit(1);
  88. }
  89. width = cvimage->width;
  90. height = cvimage->height;
  91. channels = cvimage->nChannels;
  92. is_show = false;
  93. window_name="";
  94. };
  95. /***********************************************************************
  96.                         deconstructor
  97. ***********************************************************************/
  98. ~Image() {
  99. if (is_show) {
  100. close();
  101. }
  102. window_name=NULL;
  103. cvReleaseImage(&cvimage);
  104. };
  105. /***********************************************************************
  106.                         overload =
  107. ***********************************************************************/
  108. Image& operator = (Image<T>& src) {
  109. cvReleaseImage(&cvimage);
  110. cvimage = cvCloneImage(src.cvimage);
  111. is_show = false;
  112. width = src.width;
  113. height = src.height;
  114. channels = src.channels;
  115. return *this;
  116. };
  117. /***********************************************************************
  118.                         access pixel
  119. ***********************************************************************/
  120. T& operator () (int row,int col,int channel=0) {
  121. if (channel<0 || channel>=cvimage->nChannels ||
  122. row<0 || row>=height ||
  123. col<0 || col>=width) 
  124. {
  125. cerr<<"image out of range!n";
  126. exit(1);
  127. }
  128. return ((T*)(cvimage->imageData + cvimage->widthStep*row))[col*cvimage->nChannels+channel];
  129. };
  130. /***********************************************************************
  131.                         show image in window
  132. ***********************************************************************/
  133. void show(char* window="",int x=0,int y=0) {
  134. if (!is_show) {
  135. window_name=window;
  136. cvNamedWindow(window_name);
  137. cvMoveWindow(window_name,x,y);
  138. cvShowImage(window_name,cvimage);
  139. is_show = true;
  140. }
  141. };
  142. /***********************************************************************
  143.                         close image window
  144. ***********************************************************************/
  145. void close() {
  146. if (is_show) {
  147. cvDestroyWindow(window_name);
  148. window_name="";
  149. is_show = false;
  150. }
  151. };
  152. CvSize size(){
  153. return cvSize(width,height);
  154. };
  155. };/* class Image */
  156. /************************************************************************
  157.        image tool function
  158. *************************************************************************/
  159. /***********************************************************************
  160.                         turn rgb image to gray
  161. ***********************************************************************/
  162. template <typename T>
  163. void rgb2gray (Image<T>& rgb,Image<T>& gray){
  164. cvCvtColor(rgb.cvimage,gray.cvimage,CV_RGB2GRAY);
  165. };
  166. }/* namespace cvutImage */
  167. #endif /* CVUT_IMAGE_H */