/20110419/MaxImageChannels/main.cpp

https://github.com/itrufeng/learncv · C++ · 56 lines · 33 code · 2 blank · 21 comment · 2 complexity · 35fe685ca97ac0f9297ffa5c1fc4e46c MD5 · raw file

  1. /*
  2. * main.cpp
  3. *
  4. * Created on: 2011-4-19
  5. * Author: egame
  6. */
  7. #include <opencv/cv.h>
  8. #include <opencv/highgui.h>
  9. // 处理饱和度
  10. void saturation(IplImage *inputImage,int value){
  11. for(int y=0;y<inputImage->height;y++){
  12. // 从图像的内存开始(inputImage->imageDate) 跨幅(y*inputImage->widthStep)
  13. // 图像矩阵每行的内存开始 (uchar*)inputImage->imageData+(y*inputImage->widthStep)
  14. uchar *ptr = (uchar*)inputImage->imageData+(y*inputImage->widthStep);
  15. for(int x=0;x<inputImage->width;x++){
  16. // 3维通道图,所以为3*x.每间隔3个位有一个RGB,则+1为R +2为G +3为B.
  17. ptr[3*x] += value;
  18. ptr[3*x+1] += value;
  19. ptr[3*x+2] += value;
  20. }
  21. }
  22. }
  23. // 提取区域图像
  24. IplImage* getsubimage(IplImage *inputImage,CvRect interest_rect){
  25. IplImage *sub_img = cvCreateImageHeader(cvSize(interest_rect.width,interest_rect.height),inputImage->depth,inputImage->nChannels);
  26. sub_img->origin = inputImage->origin;
  27. sub_img->widthStep = inputImage->widthStep;
  28. // inputImage->imageData + interest_rect.y * inputImage->widthStep:开始点下移interest_rect.y行,+ interest_rect.x * inputImage->nChannels:开始点右移动interest_rect.x列.
  29. sub_img->imageData = inputImage->imageData + interest_rect.y * inputImage->widthStep + interest_rect.x * inputImage->nChannels;
  30. return sub_img;
  31. }
  32. int main(int args,char *argv[]){
  33. IplImage *oneimage;
  34. cvNamedWindow("saturation",CV_WINDOW_AUTOSIZE);
  35. //
  36. assert(argv[1]);
  37. //
  38. oneimage = cvLoadImage(argv[1],CV_LOAD_IMAGE_ANYCOLOR);
  39. CvRect rect = cvRect(30,30,280,280);
  40. // 设置感兴趣区域,只对这部分。设置后之对这部分处理 需要调用OpenCV系统函数.也不是所有的OpenCV函数都会处理ROI 下面注释区域为 系统函数。调用时候需要注掉saturation(oneimage,-50);
  41. // cvSetImageROI(oneimage,rect);
  42. // cvAddS(oneimage,cvScalar(180),oneimage);
  43. // 提取区域图像
  44. IplImage *subimage =getsubimage(oneimage,rect);
  45. saturation(subimage,20);
  46. // 取消感兴趣区域
  47. // cvResetImageROI(oneimage);
  48. cvShowImage("saturation",oneimage);
  49. cvWaitKey(0);
  50. //
  51. cvReleaseImage(&oneimage);
  52. cvDestroyWindow("saturation");
  53. return 0;
  54. }