본문 바로가기

반응형
SMALL

전체 글

OpenCV 잡음(noise) 제거하기 - Local Averaging, Gaussian smoothing 이미지에서 Noise 제거하기 Noise 픽셀들만 정확히 찾아내서 원래 색깔로 돌려놓는 방법이 있으면 좋으련만... 이런 방법을 구현하기는 거의 불가능하다. 왜냐면 어떤 픽셀이 noise인지 알기 쉽지 않을 뿐더러, 설령 알 수 있다하더라도 원래 색깔이 어떤 것인지를 알기는 더더욱 어렵기 때문이다. Noise를 완전히 없애기는 어려우니, 눈에 덜 띄도록 하는 것이 한 가지 방법이 될 수 있다. Noise 픽셀의 특징은 주변 픽셀들과 다른 색깔값을 갖는다는 것이다. 그렇다면 주변 픽셀들과 비슷한 색깔을 갖도록 하면 될 것이다. 그런데, 어떤 픽셀이 noise인지 모르기 때문에, 모든 픽셀에 대해서 주변 픽셀들과 비슷한 색을 갖도록 하는 것이 noise를 완화시키는 한 가지 방법이다. Local Averag.. 더보기
계산기 만들기 숙제 계산기 만들기두 개 숫자의 +, -를 계산하여 출력하는 계산기를 작성하시오.클래스 CalculatorLogic을 완성하여,다음과 같은 계산이 동작하도록 하시오. 1 + 1 = 21 + 11 = 1211 + 1 = 121 - 1 = 01 - 11 = -1011 - 1 = 10 숫자: 1자리 이상, 10자리까지 처리가 가능해야 함.연산: +와 -만 처리CLEAR를 누르면 0으로 초기화하고 0만 표시 입력순서에 맞는 않을 경우, 무시 제출물: 돌아가는 소스코드 시연 소스코드 1. 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 4.. 더보기
OpenCV 잡음, Salt & Pepper Noise 추가하기 Salt and Pepper Noise 추가하기 영상잡음의 다른 종류로 salt and pepper noise라는 것이 있다. 이것은 Gaussian noise와 달리 잡음이 주변 픽셀들과 색깔이 확연히 다르다.마치 사진 위에 소금과 후추를 떨어뜨려 놓은 것 처럼 보인다고 해서 salt & pepper noise라고 한다. 아래 사진에 salt and pepper noise를 추가해보자 한다.전체 픽셀중에 약 5%를 무작위로 골라서 해당 위치를 noise로 바꾸는 것이다. 결과는 아래 사진과 같다. 위 이미지 결과를 만들어내기 위한 소스코드는 아래와 같다. 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.. 더보기
OpenCV 잡음이 들어간 사진 만들기 (Gaussian Noise) 잡음이 들어간 사진 만들기 (Gaussian Noise) 사진은 원래 잡음이 없는 것이 좋지만, 일부러 잡음을 만들어 넣더도새로운 느낌이 난다.잡음, 즉 noise를 만드는 방법 중, 여기서는 Gaussian Noise를 만들어 넣는 방법을 생각해보자. 우선 결과부터 살펴보면,아래는 잡음이 없는 깨끗한 영상이다. 아래는 위의 깨끗한 영상에 일부러 잡음을 만들어 넣은 것이다.특히 이 잡음은 Gaussian noise이다. Gaussian noise이것은 평균과 분산을 갖는 정규분포에 따라 임의로 발생한 noise를 말한다.잡음값이 임의로 막 생겨나기는 하는데, 그 잡음들의 빈도수를 살펴보면 정규분포를 가지고 있다.즉, 평균값에 가까운 잡음들의 개수가 평균에서 먼 잡음값들보다 많다. 아래는 위의 사진들을 만.. 더보기
OpenCV 피부색 영역만 추출하기 이미지에서 사람 피부영역만 골라서 표시하기 사람의 피부색은 HLS영상의 기준으로 볼 때 다음과 같은 조건을 만족한다.Saturation의 값은 0.2보다 크거나 같고,Hue값은 28도보다 작거나 같고, 또는 330도 보다 크거나 같으며,Luminance를 Saturation값으로 나눈 값이 0.5와 3.0 사이에 있어야 한다. 이것은 2007년에 Kakumanu라는 사람이 Pattern Recognition 논문지에 "A survey of skin-color modeling and detection methods"라는 제목으로 실은 논문에 나오는 내용이다. 아래와 같은 이미지에서 피부색은 그대로 두고, 나머지 영역은 모두 검게 바꾼다고 하자.결과는 아래와 같다. 흑인, 백인, 황인에 상관없이 얼굴영역이 .. 더보기
Singly Linked List (SLL) 소스코드 (Source code) 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 12.. 더보기
Scanf 미스테리, 그것이 알고싶다. 함수 scanf ( ) 사용법 제대로 알기 콘솔창을 통해 키보드 입력을 받을 때 유용하게 사용할 수 있는 함수가 scanf이다. 그런데, scanf의 동작이 미스테리할 때가 있다.예상치도 않게 줄바꿈이 생기는 현상이 발생할 수 있는데, 여기서는 왜 그런 일이 발생하는지 설명하고, 고칠 수 있는 방법을 제시한다. 우선, scanf( )가 정상적으로 동작하는 경우를 살펴보자.간단한 예제 프로그램을 하나 작성해 보자. 콘솔창에서 숫자를 입력받아서 그 값을 출력하는 동작을 반복하고,입력값이 -999이면 종료하는 프로그램이다.소스코드는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21#include int main(void) { int data; whi.. 더보기
OpenCV HLS형식의 이미지 채널별 분리 (Split HLS-formated image) HLS형식의 이미지 채널별 분리 HLS영상은 Hue, Luminance, Saturation 채널을 가진 영상으로, 각각이 의미하는 바는 다음과 같다. Hue: 색조라는 뜻. Color와 동의어. 일상적으로 color 단어가 많이 쓰임. Hue is synonymous with color.Luminance: 밝기라는 뜻.Saturation: 1. 색채의 강도, 또는 색깔의 포화도. 즉, 흰색이나 회색이 들어있지 않은 색의 순수한 정도 또는 색의 선명도에 관한 언급. 2. 색의 3속성의 하나로 색의 강도나 순수한 정도. 3. 같은 색 계열에서 나타나는 색의 선명한 정도. 또는 그 차이. 아무 것도 섞지 않아 맑고 깨끗하며 원색에 가까운 것을 채도가 높다고 표현한다. 4. 색의 채도는 검정과 흰색이 포함된 .. 더보기
OpenCV YUV형식의 이미지 분리 (Split YUV-formated image) YUV형식의 이미지를 채널별로 출력하기 YUV형식의 이미지는3개의 채널, Y, U, V를 가지고 있지만RGB와 달리 Y채널에는 영상의 밝기,U, V채널에는 색차정보를 가지고 있다. 아래는 YUV 영상과 이를 각 채널별로 나누어 출력한 것이다. 원본영상 Y채널 영상 (밝기에 대한 정보를 가지고 있다.) U채널 영상 V채널 영상 소스코드 다음 프로그램은 YUV형식을 가진이미지를 Y, U, V 채널요소별로 분리하여 출력한다. 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#include #include using namespace cv; using n.. 더보기
OpenCV 함수 at( )과 포인터 사용간의 시간 차이 OpenCV 성능향상을 위한 포인터(Pointer) 사용 함수 at( )의 문제점 이미지의 각 픽셀값을 바꿀 때함수 at( )을 사용했다.기능상으로는 아무 문제가 없지만, 속도가 느린 단점이 있다. 예를 들어, 다음과 같은 컬러이미지를 반전하는 경우를생각해보자. 원본 컬러영상 반전한 컬러이미지 함수 at( )을 이용한 이미지 반전코드for (int r = 0; r 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#include.. 더보기
컬러이미지를 색깔별로 구분하기 (Split color image into R, G, B images) 컬러이미지 (Color image)를 R, G, B 요소로 분리하기 컬리이미지의 각 픽셀은 3개 색채널 (red, green, blue)로 구성되어 있다.따라서 이미지에서 각 채널별 요소를 분리해 낼 수 있다. 아래와 같은 컬러이미지가 있다고 하자. Red 채널만 뽑아낸 결과위의 영상에서 G와 B는 무시하고, R에 해당하는 값만 뽑아낸 결과는아래와 같다.왼쪽 잔의 음료수 색이 빨간 색에 가까웠기 때문에,Red만 뽑아낸 영상에서는 해당 부분이 하얗게 나타난다.그리고 원래 하얀색이었던 부분은 R, G, B값이 모두 컸기 때문에Red만 뽑아낸 영상에서도 하얗게 나타난다.Green 채널만 뽑아낸 결과Blue 채널만 뽑아낸 결과 함수 split( ) OpenCV 라이브러리에서는 컬러이미지를 각 채널별로 분리해내는.. 더보기
이미지 반전하기 (Invert Color Image) 반전 이미지 만들기 (Make inverted image) 컬러 이미지는 하나의 픽셀마다 빨간색, 녹색, 청색 (Red, green, blue)의 3가지 정보를 가지고 있다.각각의 색깔 정보를 전문용어로 채널(channel)이라고 한다. 일반적으로 각 채널은 8 bit을 사용하므로256 가지 의 색을 표시할 수 있다.즉, 0부터 255까지의 값을 가질 수 있다. 이론적으로 보자면,각 채널이 256가지의 색을 표현하기 때문에,3개 채널을 모두 고려하면 256 * 256 *256 가지의 색깔 표현이 가능한 것이다. 반전 이미지 (inverted image)는 각 채널의 값 v를 255-v로 대체하는 것을 말한다.쉽게 말하면, 0을 255로 바꾸는 것이다.직관적으로 이해하자면, 검정색이 흰색이 되는 것이다.이.. 더보기
Webcam 영상을 Grey로 출력하기 웹캠(webcam) 영상을 Grey로 출력하기 웹캠으로부터 들어오는 영상을 회색영상으로 변환하여 출력하는 프로그램이다.아래 그림에서 위의 것은 webcam에서 들어오는 원래 컬러영상이고,아래 것은 이를 grey로 바꾼 것이다. (사실 grey변환 외에도 quantisation을 수행한 것으로, 이에 대해서밑에서 좀 더 자세히 설명한다.) line 15USB로 연결된 웹캠을 이용하려면 OpenCV에서 제공하는VideoCapture 객체를 사용하면 편리하다.각 카메라마다 ID를 붙이는데, 기본으로 붙어있는 카메라는 0, USB로 연결한 웹캠은 1 정도 된다.이건 ID를 바꿔가면서 테스트해보면 된다. line 26마우스 클릭을 처리하기 위해서, 클릭 이벤트시 수행할 함수를 설정하는 부분이다."cam"은 마우스.. 더보기
Ragged 배열(Array) Ragged 배열(Array) Ragged의 의미'너덜너덜해진', '옷이 누더기가 된','해진' 이라는 뜻을 갖는다. 그래서, ragged flag라고 하는 것은위의 그림처럼 끝이 다 해진 깃발을 말한다. Ragged 배열(array)의 의미2차원 배열을 생각해 보면,각 행마다 열의 개수가 모두 똑같다.Ragged array는 각 행마다 열의 개수가 다른 배열을 의미한다. 아래 그림을 보자.왼쪽에는 일반 2차원배열이 있다.3개의 행으로 이루어져 있고, 각 행마다 모두 3개씩의 열을 갖는다.반면에,오른쪽을 보면 2차원 배열이긴 한데, 모양새가 예사롭지 않다.우선 3개의 행이 있으되,0번 행은 2개의 열,1번 행은 3개의 열,2번 행은 4개의 열을 갖는다.이런 것을 ragged array라고 한다. Ragg.. 더보기
Visual studio 2015 scanf warning 처리 방법에 대하여 Visual Studio의 scanf 문제 Visual studio 2015를 사용할 때,(2013 버전도 마찬가지지만,)다음과 같은 프로그램을 빌드한다고 하자.scanf 함수를 이용해서 숫자를 입력받고,출력하는 프로그램이다.그런데,......빌드하면 다음과 같은warning메시지가 뜬다. 문자 그대로 해석을 하면 경고 C4996: 'scanf': 이 함수 또는 변수는 사용하면 위험할 수 있습니다. 이것 대신에 scanf_s 함수를 사용하기를 바랍니다. 이 경고 메시지를 끄시려면, _CRT_SECURE_NO_WARNINGS를 사용하고,이에 대한 자세한 설명은 도움말을 찾아보세요. 아시겠지요..scanf는 해킹의 우려 때문에 위험할 수도 있습니다.그래서,두 가지 해결책을 제시하고 있지요.첫 번째는 scan.. 더보기

반응형
LIST