반응형
C# 이미지 그레이스케일(흑백), 모노크롬(이진화)
영상처리에서 많이보던 내용이고...
C#에서의 영상처리는 OpenCv Sharp , EmguCv를 사용하는거로 알고있다.
하지만 간단한 영상처리는 C# 내부함수와 적절한 연산을통해서도 할 수 있다.
소스코드 다운로드 :
button1_Clikc => 이미지 Load
button2_Clikc => 이미지 흑백
button3_Clikc => 이미지 이진화
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 68 69 70 71 | private void button1_Click(object sender, EventArgs e) { // 이미지 로드 OpenFileDialog openFile = new OpenFileDialog(); openFile.DefaultExt = "jpg"; openFile.Filter = "Graphics interchange Format (*.jpg)|*.jpg|All files(*.*)|*.*"; openFile.ShowDialog(); // 만약파일이선택되었으면 if (openFile.FileName.Length > 0) { image = new Bitmap(openFile.FileName); // 이미지를 픽쳐박스 사이즈에 맞게 출력. pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = image; } } private void button2_Click(object sender, EventArgs e) { Color col; int Average; //x 는 image의 width //y 는 image의 hediht for (int x = 0; x < image.Width; x++) { for (int y = 0; y < image.Height; y++) { //for문을 돌며 이미지 그레이스케일화 //그레이스케일은 약간식 다른방법으로도 가능하니 다른걸 사용해도 무관하다. col = image.GetPixel(x, y); Average = (col.R + col.G + col.B) / 3; col = Color.FromArgb(Average, Average, Average); image.SetPixel(x, y, col); } } pictureBox1.Image = image; } private void button3_Click(object sender, EventArgs e) { //이진화를 하기전, 그래이스케일을 거치고 해야 원하는 데이터를 얻을확률이 높다. Color col; int Average; for (int i = 0; i < image.Size.Width; i++) { for (int j = 0; j < image.Size.Height; j++) { col = image.GetPixel(i, j); Average = (col.R + col.G + col.B) / 3; //이진화 흑, 백 위치를 변경하려면 아래 if문 주석위치 변경. //이진화에 한계값은 120으로지정.. 0~255 사이의 숫자로 조정하면된다. if (Average <= 120) { //image2.SetPixel(i, j, Color.White); image.SetPixel(i, j, Color.Black); } else { //image2.SetPixel(i, j, Color.Black); image.SetPixel(i, j, Color.White); } } } pictureBox1.Image = image; } | cs |
예외처리가 안되있기때문에, 실행순서는 이미지 Load 후, 흑백처리,
이진화 형식으로 진행해야한다.
이미지를 불러오면 흑백버튼을 사용해서 이미지를 흑백으로변경한다.
이미지사이즈가 크다면, 컨버팅하는데 오래걸릴거다...
오래걸리는이유는 for문을통해 0,0 -> 0,1 -> 0,2 부터시작해서
100,10 -> 100,11 이런식으로 모든 이미지 픽셀값을 읽어 그레이스케일을 한다...
4000, 4000 사이지를 흑백화하는데 10초정도 소요되는거같다.
흑백화가 완료되면 이미지 이진화버튼을 클릭하여 모노크롬(이진화)를 진행한다.
한계값은 120으로 줬으며 프로그램 소스에 주석을 잘 달아뒀으니 확인해보면된다!
반응형
'C# > C# Windows Form' 카테고리의 다른 글
C# AutoIt 응용 (0) | 2017.06.05 |
---|---|
C# 폼간 데이터 전송 (0) | 2017.06.05 |
C# 형변환 (0) | 2017.05.31 |
C# 시작 폼 변경하기 (0) | 2017.05.15 |
C# Aria 암호화 (0) | 2017.05.10 |