IT/- 프로그래밍
OpenCV 이미지 샤프닝(세세한 부분을 강조) 하기
혁준7519
2017. 4. 20. 07:19
이미지 샤프닝(세세한 부분을 강조) 하기
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <opencv/cv.h> #include <opencv/highgui.h> void main() { IplImage *srcImage = cvLoadImage("D:/study/blurimage.jpg", -1); IplImage *rstImage1 = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); IplImage *rstImage2 = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); IplImage *rstImage3 = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); //영상 샤프닝 : 영상의 세세한 부분을 더욱 강조하여 흐려서 판독이 잘 안되는 영상을 더욱 선명하게 하는것 //샤프닝 마스크의 모든 계수의 합은 1이다 double mask1[3][3] = { {1, -2, 1}, { -2, 5, -2 }, { 1, -2, 1 } }; double mask2[3][3] = { { 0, -1, 0 }, { -1, 5, -1 }, { 0, -1, 0 } }; double mask3[3][3] = { { -1, -1, -1 }, { -1, 9, -1 }, { -1, -1, -1 } }; //cvMat(행의수, 열의수, 행렬원소의 형태, 데이터) : 행렬생성 //행렬원소의 형태 : CV_<비트수>(S|U|F)C<채널수> CvMat kernel1 = cvMat(3, 3, CV_64FC1, mask1); CvMat kernel2 = cvMat(3, 3, CV_64FC1, mask2); CvMat kernel3 = cvMat(3, 3, CV_64FC1, mask3); //cvFilter2D(원본 이미지, 결과 이미지, 마스크 행렬) : 사용자 정의한 마스크로 이미지 컨벌루션 //ps. 마스크 행렬 데이터들은 1채널 실수형이어야 한다 cvFilter2D(srcImage, rstImage1, &kernel1); cvFilter2D(srcImage, rstImage2, &kernel2); cvFilter2D(srcImage, rstImage3, &kernel3); //create window cvNamedWindow("source image", CV_WINDOW_AUTOSIZE); cvNamedWindow("sharp1 image", CV_WINDOW_AUTOSIZE); cvNamedWindow("sharp2 image", CV_WINDOW_AUTOSIZE); cvNamedWindow("sharp3 image", CV_WINDOW_AUTOSIZE); //show window cvShowImage("source image", srcImage); cvShowImage("sharp1 image", rstImage1); cvShowImage("sharp2 image", rstImage2); cvShowImage("sharp3 image", rstImage3); cvWaitKey(0); //release image cvReleaseImage(&srcImage); cvReleaseImage(&rstImage1); cvReleaseImage(&rstImage2); cvReleaseImage(&rstImage3); } | cs |
결과