歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 利用OpenCV計算圖像的垂直和水平積分投影

利用OpenCV計算圖像的垂直和水平積分投影

日期:2017/3/1 10:10:35   编辑:Linux編程
本文的測試圖像是標准的lena圖像。

代碼:

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #pragma comment( lib, "cv.lib" )
  4. #pragma comment( lib, "cxcore.lib" )
  5. #pragma comment( lib, "highgui.lib" )
  6. int main()
  7. {
  8. IplImage * src=cvLoadImage("lena.jpg",0);
  9. // cvSmooth(src,src,CV_BLUR,3,3,0,0);
  10. cvThreshold(src,src,50,255,CV_THRESH_BINARY_INV);
  11. IplImage* paintx=cvCreateImage( cvGetSize(src),IPL_DEPTH_8U, 1 );
  12. IplImage* painty=cvCreateImage( cvGetSize(src),IPL_DEPTH_8U, 1 );
  13. cvZero(paintx);
  14. cvZero(painty);
  15. int* v=new int[src->width];
  16. int* h=new int[src->height];
  17. memset(v,0,src->width*4);
  18. memset(h,0,src->height*4);
  19. int x,y;
  20. CvScalar s,t;
  21. for(x=0;x<src->width;x++)
  22. {
  23. for(y=0;y<src->height;y++)
  24. {
  25. s=cvGet2D(src,y,x);
  26. if(s.val[0]==0)
  27. v[x]++;
  28. }
  29. }
  30. for(x=0;x<src->width;x++)
  31. {
  32. for(y=0;y<v[x];y++)
  33. {
  34. t.val[0]=255;
  35. cvSet2D(paintx,y,x,t);
  36. }
  37. }
  38. for(y=0;y<src->height;y++)
  39. {
  40. for(x=0;x<src->width;x++)
  41. {
  42. s=cvGet2D(src,y,x);
  43. if(s.val[0]==0)
  44. h[y]++;
  45. }
  46. }
  47. for(y=0;y<src->height;y++)
  48. {
  49. for(x=0;x<h[y];x++)
  50. {
  51. t.val[0]=255;
  52. cvSet2D(painty,y,x,t);
  53. }
  54. }
  55. cvNamedWindow("二值圖像",1);
  56. cvNamedWindow("垂直積分投影",1);
  57. cvNamedWindow("水平積分投影",1);
  58. cvShowImage("二值圖像",src);
  59. cvShowImage("垂直積分投影",paintx);
  60. cvShowImage("水平積分投影",painty);
  61. cvWaitKey(0);
  62. cvDestroyAllWindows();
  63. cvReleaseImage(&src);
  64. cvReleaseImage(&paintx);
  65. cvReleaseImage(&painty);
  66. return 0;
  67. }

下面是代碼運行的結果:


Copyright © Linux教程網 All Rights Reserved