본문 바로가기
IT/OpenCV

cvLUT를 사용한 반전영상

by Jang HyunWoong 2014. 12. 19.

void cvLUT(const CvArr* src, CvArr* dst, const CvArr* lut);

 

함수를 사용해서 반전 행렬을 만들 수 있는데 이를 이용해서 이미지의 행렬을 구한 후 그 행렬을 반전하면

반전된 이미지를 구할 수 있다. 

 

 

  1. #include <stdio.h>
  2. #include "cv.h"
  3. #include "highgui.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_COLOR))== NULL )
  9. return -1;
  10. CvMat matHeader, *pSrcMat;
  11. pSrcMat = cvGetMat(srcImage, &matHeader);
  12.  
  13. CvMat* matLUT = cvCreateMat(1, 256, CV_8UC1);
  14.  
  15. for(int i=0; i<256; i++)
  16. {
  17. cvSetReal1D(matLUT, i, 255-i);
  18. }
  19.  
  20. cvLUT(&matHeader, pSrcMat, matLUT);
  21.  
  22. cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
  23. cvShowImage("Image", srcImage);
  24.  
  25. cvWaitKey(0);
  26. cvDestroyAllWindows();
  27. cvReleaseMat(&matLUT);
  28. cvReleaseImage(&srcImage);
  29. return 0;
  30. }
  31. void PrintMat(const CvMat *mat, const char *strName)
  32. {
  33. int x, y;
  34. double fValue;
  35. printf(" %s \n = \n", strName);
  36. for(y= 0; y<mat->rows; y++)
  37. {
  38. for(x= 0; x<mat->cols; x++)
  39. {
  40. fValue = cvGetReal2D(mat, y, x);
  41. printf("%4d", cvRound(fValue) );
  42. }
  43. printf("\n");
  44. }
  45. printf("\n\n");
  46. }

 

결과





원본파일

 



반전 결과

 

월리는 쉽다.

 

만약 행렬

mat[LUT] = [255 254 253 ... 1 0];

matA = [0 50 100; 150 200 255]; //2x3행렬이 있다면

pMatC = matLUT(matA)


 

위의 식과 같은 원리로 반전이 되는 것이다. 

 

반응형

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

OpenCV 함수 정리  (1) 2014.12.19
반전영상  (0) 2014.12.19
영상을 행렬로, 행렬을 영상으로...  (0) 2014.12.19
커널 Kernel in Image processing  (0) 2014.12.19
PDB 파일을 찾거나 열 수 없습니다  (0) 2014.12.19