잡음이 있는 이미지 생성하기 (임펄스 잡음)
임펄스 잡음 : 흰색과 검은색을 갖는 잡음
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 61 62 63 64 65 66 67 | #include <opencv/cv.h> #include <opencv/highgui.h> #include <time.h> IplImage* ImpulseNoiseCreate(IplImage *img, double noiseRate); void main() { IplImage* srcImage = cvLoadImage("D:/study/Lena_gray.jpg", -1); IplImage* impulseImage = ImpulseNoiseCreate(srcImage, 0.2); //create window cvNamedWindow("impulse", CV_WINDOW_AUTOSIZE); //show image cvShowImage("impulse", impulseImage); cvWaitKey(0); //release image cvReleaseImage(&impulseImage); } //임펄스 잡음 이미지 생성 //임펄스 잡음 : 흰색과 검은색을 갖는 잡음 IplImage* ImpulseNoiseCreate(IplImage *img, double noiseRate) { int height = img->height; int width = img->width; int step = img->widthStep; uchar* data = (uchar*)img->imageData; int rand1, rand2; int imgSize = width * height; int numOfNoise = (int)(imgSize * noiseRate / 2); time_t nowTime; srand(time(&nowTime)); //랜덤으로 검은색으로 잡음을 준다 for (int i = 0; i < numOfNoise; i++) { rand1 = rand() % width; rand2 = rand() % height; int index = rand1*step + rand2; if (index >= imgSize) { index = imgSize - 1; } data[index] = 0; } //랜덤으로 하얀색으로 잡음을 준다 for (int i = 0; i < numOfNoise; i++) { rand1 = rand() % width; rand2 = rand() % height; int index = rand1*step + rand2; if (index >= imgSize) { index = imgSize - 1; } data[index] = 255; } return img; } | cs |
결과
'IT > - 프로그래밍' 카테고리의 다른 글
OpenCV 임펄스 잡음 제거하기 (중앙값 필터링 사용) (0) | 2017.04.24 |
---|---|
OpenCV 가우시안 잡음 제거하기 (평균필터링 사용) (0) | 2017.04.23 |
OpenCV 잡음이 있는 이미지 생성하기 (가우시안 잡음) (0) | 2017.04.21 |
OpenCV 이미지 샤프닝(세세한 부분을 강조) 하기 (0) | 2017.04.20 |
OpenCV 이미지 가우시안 필터링 하기 (0) | 2017.04.19 |