본문 바로가기
IT/OpenCV

영상을 행렬로, 행렬을 영상으로...

by Jang HyunWoong 2014. 12. 19.

cvGetMat 함수는 CvMat 행렬 헤더 포이터를 반환하고, 

cvGetImage 함수는 IplImage 영상의 헤더 포인터를 반환한다.

 

결과 화면






선택한 영역의 행렬을 나타내고 있다. 

 



위에서 나타난 행렬을 다시 이미지영상으로 나태낸 것이다. 

 

  1. #include "cv.h"
  2. #include "highgui.h"
  3. #include <stdio.h>
  4. void PrintMat(const CvMat *mat, const char *strName);
  5. int main()
  6. {
  7. IplImage *srcImage;
  8. if((srcImage=cvLoadImage("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE)) == NULL)
  9. return -1;
  10. CvMat matHeader, *pSrcMat;CvMat 함수로 행렬 헤더 포인터를 선언한다.
  11. cvSetImageROI(srcImage, cvRect(0, 0, 50, 50));영상 srcImage의 ROI(region of interest)를 
  12. //cvRect(0,0,50,50)로 설정
  13. cvRectangle(srcImage, cvPoint(0, 0), cvPoint(50, 50), CV_RGB(0, 0, 255), 2); //선택영역 보기 위한 설정
  14. pSrcMat = cvGetMat(srcImage, &matHeader);srcImage를 pSrcMat로 변환한다. 
  15. //&matHeader와 pSrcMat은 동일한 주소이다.
    1.   IplImage *dstImage, tmpImage;
    2. dstImage = cvGetImage(pSrcMat, &tmpImage);
    3.  
    4. cvNamedWindow("dstImage", CV_WINDOW_AUTOSIZE);
    5. cvShowImage("dstImage", dstImage);
    6. PrintMat(pSrcMat, "pSrcMat");
    7.  
    8. cvWaitKey(0);
    9. cvDestroyAllWindows();
    10. cvReleaseImage(&srcImage);
    11. return 0;
    12. }
    13. void PrintMat(const CvMat *mat, const char *strName)
    14. {
    15. int x, y;
    16. double fValue;
    17. printf("%s \n = \n", strName);
    18. for(y=0; y<mat->rows; y++)
    19. {
    20. for(x=0; x<mat->cols; x++)
    21. {
    22. fValue = cvGetReal2D(mat, y, x);
    23. printf("%4d ", cvRound(fValue));
    24. }
    25. printf("\n");
    26. }
    27. printf("\n\n");
    28. }

     

     

    lena.jpg 이미지의 cvRect(0, 0, 50, 50)의 영역을 불러 온것이다. 

    반응형

    'IT > OpenCV' 카테고리의 다른 글

    반전영상  (0) 2014.12.19
    cvLUT를 사용한 반전영상  (0) 2014.12.19
    커널 Kernel in Image processing  (0) 2014.12.19
    PDB 파일을 찾거나 열 수 없습니다  (0) 2014.12.19
    영상 카메라 띄우기  (0) 2014.12.19