void cvLUT(const CvArr* src, CvArr* dst, const CvArr* lut);
함수를 사용해서 반전 행렬을 만들 수 있는데 이를 이용해서 이미지의 행렬을 구한 후 그 행렬을 반전하면
반전된 이미지를 구할 수 있다.
- #include <stdio.h>
- #include "cv.h"
- #include "highgui.h"
- void PrintMat(const CvMat *mat, const char *strName);
- int main()
- {
- IplImage *srcImage;
- if( (srcImage=cvLoadImage("lena.jpg",CV_LOAD_IMAGE_COLOR))== NULL )
- return -1;
- CvMat matHeader, *pSrcMat;
- pSrcMat = cvGetMat(srcImage, &matHeader);
- CvMat* matLUT = cvCreateMat(1, 256, CV_8UC1);
- for(int i=0; i<256; i++)
- {
- cvSetReal1D(matLUT, i, 255-i);
- }
- cvLUT(&matHeader, pSrcMat, matLUT);
- cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
- cvShowImage("Image", srcImage);
- cvWaitKey(0);
- cvDestroyAllWindows();
- cvReleaseMat(&matLUT);
- cvReleaseImage(&srcImage);
- return 0;
- }
- void PrintMat(const CvMat *mat, const char *strName)
- {
- int x, y;
- double fValue;
- for(y= 0; y<mat->rows; y++)
- {
- for(x= 0; x<mat->cols; x++)
- {
- fValue = cvGetReal2D(mat, y, x);
- }
- }
- }
결과
원본파일
반전 결과
월리는 쉽다.
만약 행렬
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 |