IT/- 프로그래밍
OpenCV 사용자가 지정한 마스크로 컨벌루션하기
혁준7519
2017. 4. 17. 06:57
사용자가 지정한 마스크로 컨벌루션하기
컨벌루션 : 가중치를 갖는 마스크를 이용해 영상처리를 하는것
c++)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <opencv/cv.h> #include <opencv/highgui.h> void main() { IplImage *srcImage = cvLoadImage("D:/study/testimage.jpg", -1); IplImage *resultImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); double maskData[7][7] = { { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }, { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }, { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }, { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }, { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }, { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }, { 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49, 1.0 / 49 }}; //cvMat(행의수, 열의수, 행렬원소의 형태, 데이터) : 행렬생성 //행렬원소의 형태 : CV_<비트수>(S|U|F)C<채널수> CvMat kernel = cvMat(7, 7, CV_64FC1, maskData); //cvFilter2D(원본 이미지, 결과 이미지, 마스크 행렬) : 사용자 정의한 마스크로 이미지 블러링 //ps. 마스크 행렬 데이터들은 1채널 실수형이어야 한다 cvFilter2D(srcImage, resultImage, &kernel); //create window cvNamedWindow("source image", CV_WINDOW_AUTOSIZE); cvNamedWindow("7x7 image", CV_WINDOW_AUTOSIZE); //show window cvShowImage("source image", srcImage); cvShowImage("7x7 image", resultImage); cvWaitKey(0); cvReleaseImage(&srcImage); cvReleaseImage(&resultImage); } | cs |
결과