본문 바로가기

코딩124

C언어 기초 - 조건문 if 이해하기 본문 목표 C 언어를 다루는데에 있어서 중요한것은 3가지라고 할 수 있다. 1. 자료형(변수) 2. 조건문 3. 반복문 자료형은 여태 다뤘으니, 이번에는 조건문을 다루도록 한다. 조건문 중에서 if 함수를 이해하고, 사용법을 익혀보자. 개념 정리 조건문은 말 그대로 조건이 충족하느냐? 못하느냐? 고 묻고, 충족하면 실행하는 명령이다. 조건문을 제대로 쓸 줄 알려면 연산자를 알아야 한다. 연산자 중에서 조건문에만 필요한 연산자를 다뤄보자. 이런 연산이 조건문에 사용된다. 솔직히 기초니깐 마지막 비트 논리 연산자는 굳이 지금 알 필요 없다. 연산자 의 구조를 보면 다음과 같다. (관계, 논리, 조건) 연산자는 1 또는 0의 결과를 내 놓는다. if(조건) 의 경우 조건이 참이면, 해당 조건문을 실행하는 것이.. 2020. 7. 5.
C언어 기초 - 지역변수와 전역변수 이해하기 본문 목표 C언어에서 코딩을 하면 당연히 지역변수와 전역변수를 이해해야한다. 지역변수와 전역변수의 차이를 이해하고, 실제 사용하는 방법을 이해한다. 개념 정리 지역변수와 전역변수를 이해해야 하는데, 그 차이는 이름으로 유추해 볼 수 있다. 지역변수 - local variable : 특정 지역에서만 사용되는 변수 전역변수 - global variable : 모든 구역에서 사용되는 변수 즉, 지역변수는 좁은 범위에서 사용되고, 전역변수는 모든 범위에서 사용하는 것이다. "그냥 모든 변수 다 전역변수로 사용하고 쓰면 편하잖아요!" 라고 할 수 있다. 지역변수가 중요한 이유는 프로그램 실행속도와 연관된다. 모든 변수를 전역변수로해서 사용하게 된다면 프로그램이 시작부터 끝까지 사용하지도 않을 변수들을 다 유지한채.. 2020. 7. 5.
C언어 기초 - 기본 자료형 정리 본문 목표 C언어를 사용하면 변수들을 잘 다뤄야 한다. (어느 언어를 이용하던 마찬가지) 그러려면 자료형을 잘 알고 있어야한다. 처음 C언어를 다루는 단계라면 얕게 배우고 넘어가도 되지만, 이제 코드 실행 시간을 단축시키고, 메모리를 효율적으로 관리하려면 메모리 크기까지 다뤄야 한다. 그리고 수학적으로 이용하는 경우에는 각 자료형의 데이터 범위도 알아야 한다. 오늘은 C언어의 가장 기초가 되는 자료형을 익혀보도록 한다. 개념 정리 C언어의 기본 자료형으로는 정수형과 실수형이 있다. 일단 컴퓨터는 0과 1 로 작동한다. 즉, 2진수로 작동한다. 0 과 1, 두개를 사용할 때, 그 한자리 단위를 우리는 bit 라고 한다. 만약 8 bit 라고 한다면 위와 같이 되는 것이다. 우리가 1000m 를 1km 라고.. 2020. 7. 5.
C언어 기초 - printf 로 숫자 출력하기 본문 목표 어떤 언어로든 코딩을 할 때, 잘 진행되고 있는지 확인이 필요하다. 그런 상황에서 중간에 변수들의 값 또는 진행 상황을 확인하기 위해서 화면에 값을 출력해줄 필요가 있다. 그 때, 사용하는 함수가 C언어에서는 printf( ) 라는 함수이다. printf( ) 함수를 이용해서 변수들의 값을 출력하여야 한다. 이 때, 변수마다 출력하는 방법이 다르므로 사용법을 이해한다. 개념 정리 printf( ) 라는 기본 함수를 이용해서 문장을 출력하는 것을 저번에 다뤄봤었다. 이번에는 변수들을 출력해봐야 하는데, 아직 변수들을 다루지 않았으므로, 출력방식에 대해서만 다뤄보겠다. 1. 정수 - -3, -2, -1, 0, 1, 2, 3 ...... - 정수형을 출력할 때에는 %d 를 사용한다. 2. 실수 - .. 2020. 7. 5.
C언어 기초 - printf 로 문장 출력하기 본문 목표 어떤 언어로든 코딩을 할 때, 잘 진행되고 있는지 확인이 필요하다. 그런 상황에서 중간에 변수들의 값 또는 진행 상황을 확인하기 위해서 화면에 값을 출력해줄 필요가 있다. 그 때, 사용하는 함수가 C언어에서는 printf( ) 라는 함수이다. printf( ) 함수를 이용해서 변수들의 값을 출력하거나, 진행 상황을 확인하기 위해 문자열을 출력하는 것을 할 수 있어야 한다. 개념 정리 printf( ) 는 괄호 안의 값을 출력하는 C언어 기본 함수이다. 괄호 안에 변수를 입력해도 되고, 문자열을 입력해도 된다. 아직 변수를 다루지 않았으므로 문장 출력만 다루고 넘어가도록 한다. printf( "출력하려는 문장" ); 사용 방법은 위와 같이 단순하다. 저렇게 하면 출력하려는 문장이 cmd창에 뜨게.. 2020. 7. 5.
C언어 기초 - C언어란? 본문 목표 코딩에 있어서 오래된 역사를 갖고 있고, 현재까지도 많이 사용하고 있는 C언어를 알아본다. 개념 정리 C언어는 B언어 이후에 나온 언어로 고급 언어 중 하나이다. 1971년 즈음에 개발되었고, 현재까지 사용 중인 언어이다. 다른 언어들의 기초가 되기도 한다. 비전문가들을 위해서 C언어를 간략하게 소개하자면 컴퓨터는 사실 0 과 1로만 데이터를 처리한다. 그러니깐 컴퓨터의 언어는 0과 1로만 이루어져있다고 하자. 그런데 사람의 언어는 0과 1로 이루어져 있지 않다. 사람의 언어를 고급언어를 사용하여 컴퓨터에 전달하는 것이다. 고급언어는 C, C++, JAVA 등이 포함되어 있는데, C와 C++, JAVA 모두 0 과 1로 이루어져있지 않아서 컴퓨터에서 바로 이해하지 못한다. 그래서 고급언어를 0.. 2020. 7. 5.
[C++ opencv] 이미지에서 경계선 검출하기, Edge detection 본문 목표 Color 이미지의 Grayscale 로의 변환, 노이즈 제거와 이진화, 이 모든 과정은 오늘 다룰 경계선 검출을 위해서 선행되었어야 할 필수 과정이었다. 영상인식에서 경계선 검출이 되어야 컴퓨터가 물체를 인식하고 처리할 수 있다. 전문 용어로는 Edge detection 이라고 한다. 오늘은 이 경계선 검출 방법에 대해서 알아보고, OpenCV에서 어떻게 사용하는지 다뤄보도록 하겠다. 키워드 : Edge detection, Canny, 경계선 검출 알아볼 함수 원형 - 경계선 검출, 캐니 알고리즘 ( Edge_detection, Canny algorithm ) ... Mat img = imread("Lenna.png", 0);//이미지를 grayscale로 불러옴 Mat img_edge; C.. 2020. 7. 4.
[C++ opencv] opening, closing 기법 사용하여 경계 확실히 하기 본문 목표 저번시간에 침식연산(Erosion) 과 팽창연산(Dilation) 에 대해서 알아보았었다. https://diyver.tistory.com/61 [C++ opencv] erode, dilate 사용하여 물체 명확하게 하기 본문 목표 이 전까지 grayscale 과 threshold 에 대해서 배웠었다. 이제 노이즈를 제거함에 있어서 획기적인 방법 중 하나인 erode 또는 dilate 기법에 대해서 알아보도록 하자. Erode 와 Dilate 연산을 모폴�� diyver.tistory.com 이번에는 그 두가지 연산을 혼합하는 새로운 기법을 알아보도록 한다. opening 과 closing 기법인데, 말 그대로 열어주고 닫아주는 작업이다. 무슨 소리인지 이해 안되는 것이 당연하다. openin.. 2020. 7. 3.
[C++ opencv] erode, dilate 사용하여 물체 명확하게 하기 본문 목표 이 전까지 grayscale 과 threshold 에 대해서 배웠었다. 이제 노이즈를 제거함에 있어서 획기적인 방법 중 하나인 erode 또는 dilate 기법에 대해서 알아보도록 하자. Erode 와 Dilate 연산을 모폴로지 기법이라고도 한다. erode 를 해석하면 "침식시키다" 또는 "약화시키다" 라는 뜻을 가지고 있다. erosion 이라고도 한다. 그저 erode 의 명사일 뿐이다. dilate 를 해석하면 "확장하다" 또는 "키우다" 라는 뜻을 가지고 있다. dilation 이라고도 한다. 역시 명사형일 뿐이다. 이진화 된 영상에서 사용자가 중요하게 취급하는 것이 object 인데, object를 1 (white) 로 취급할 것인지, 0 (black) 으로 취급할 것인지에 따라서.. 2020. 7. 1.
[C++ opencv] 이중 임계값 처리, double thresholding, inRange() 본문 목표 저번 포스트에서 Thresholding 에 대해서 알아봤다. Thresholding을 하는 이유는 내가 명확하게 보고 싶은 것만 보면서 이미지의 크기를 작게하고, 데이터를 단순화해서 연산처리 속도에서 이득을 얻기 위함이었다. 하지만 저번 포스트에서 배우기로는 살짝 아쉬운 부분은 하나의 임계값을 기준으로 잡아서 극과 극으로 데이터를 처리했었던 것이라 아쉬움이 있을 수 있다. 왜냐하면 야외에서 카메라를 사용해 인물을 찍었다 했을 때, 바닥은 비교적 어둡고, 하늘이 찍혔으면 그 부분은 밝을 것이다. 근데 내가 원하는 것은 그 중간에 있는 object 의 데이터일 경우에는 어떻게 해야 좋을지 고민이 될 것이다. 이런 애매한 상황에서 사용할 수 있는 것이 double thresholding 이다. op.. 2020. 7. 1.
[C++ opencv] Thresholding 임계값 처리로 binary 이미지 만들기 본문 목표 영상처리에 있어서 제일 중요한 건 처리 속도이다. 여태 언급했던 노이즈 제거 및 grayscale 사용은 다 처리 속도 때문이었다. 처리속도가 빨라야 여러장을 처리할 수 있고, 여러장을 처리해야 정확도가 올라간다. grayscale은 0~255 까지 값을 저장하는 8 bit 크기를 가지고 있는데, 이제 여기서 더 속도를 빠르게 하기 위해서는 2 bit 크기를 다뤄야 한다. 그게 바로 binary 이미지 이다. 회색의 이미지에 0~255 사이의 값을 기준으로해서 기준 값(임계 값) 이상은 1(white), 이하는 0 (black) 으로 처리하는 방법을 사용한다. 이렇게 binary 이미지로 만드는 작업을 '이진화' 라고 한다. 연산 처리를 빠르게 하고 정확하게 하기위해 사용하므로, 꼭 알아야 하.. 2020. 6. 30.
[C++ opencv] 가우시안 필터 vs 평균 필터, 노이즈제거 승자는? 본 블로그에서 가우시안 필터와 평균 필터 사용법을 전부 다루었다. 그러면서 사용하는 목적이 다르다고 했었고, 분명 둘 사이에 시간차이가 있다고 했었다. 오늘은 그 차이를 확인해보는 시간을 가져보도록 하겠다. https://diyver.tistory.com/60 [C++ opencv] 평균필터 적용하여 노이즈 제거하기 average filter, filter2d() 본문 목표 영상처리에 있어서 제일 중요한 것들 중 하나는 당연 '노이즈 제거' 이다. 노이즈 제거 방법에는 정말 여러가지가 있지만, 제일 쉬운 방법은 blur 처리를 하는 것이다. blur 처리란 영상�� diyver.tistory.com [평균 필터 포스트 보러가기] https://diyver.tistory.com/67 [C++ opencv].. 2020. 6. 30.
[C++ opencv] 가우시안 필터로 노이즈 제거하기 gaussian filter, gaussian blur() 본문 목표 영상처리에서 '노이즈 제거'의 중요성은 80%를 차지한다고해도 과언이 아니다. 노이즈 제거의 방법에는 여러가지가 있겠지만, 가장 쉽게 하는 방법은 영상을 흐리게 하는 것이다. 그 중에서 오늘은 '가우시안 필터' 또는 '가우시안 블러'를 알아보도록 한다. 이 방법은 중앙값에 가중치를 더 주고 주변은 더 흐리게 한다고 보면된다. 키워드 : 가우시안 필터, 가우시안 블러, Gaussian blur 알아볼 함수 원형 - 가우시안 필터 적용한 블러처리 ( Gaussian Blur ) ... Mat img = imread("Lenna.png", 0);//이미지를 grayscale로 불러옴 Mat img_blur; GaussianBlur(img, img_blur, Size(7, 7), 0); ... Gau.. 2020. 6. 30.
[C++ opencv] 평균필터 적용하여 노이즈 제거하기 average filter, filter2d() 본문 목표 영상처리에 있어서 제일 중요한 것들 중 하나는 당연 '노이즈 제거' 이다. 노이즈 제거 방법에는 정말 여러가지가 있지만, 제일 쉬운 방법은 blur 처리를 하는 것이다. blur 처리란 영상을 흐리게하는 방법이다. OpenCV에서는 filter2D( ) 라는 함수가 있다. 이번에는 filter2D( ) 함수를 이용해서 영상을 blur 처리하는 방법을 알아본다. 키워드 : average filter, filter2d(), 평균필터, zero padding, mirror padding 평균필터 - 원리 이해 필터는 말 그대로 걸러주는 또는 처리를 해주는 것이다. 그러니 평균필터란 말 그대로 평균값을 이용한 필터링 방식이다. 여기에는 커널 또는 마스크 크기가 필요하다. (커널은 마스크 크기에 계산 .. 2020. 6. 26.
[C++ opencv] 효율적인 Histogram 이용한 이미지 밝기 조절 본문 목표 이미지의 Histogram 정보를 통해서 이미지의 밝기를 효과적으로 조절할 수 있다. OpenCV 에서도 해당 기능을 지원하는데, 이를 적용해보도록 한다. 키워드 : equalizeHist, Histogram equalization, 히스토그램 equalizeHist 히스토그램 - 원리 이해 히스토그램은 이미지의 밝기 값이 0~255 까지 있을 때, 픽셀들이 얼마나 그 값들을 갖고 있는지 나타내주는 그래프 이다. 예를 들면, 위와 같이 a 라는 이미지의 픽셀들 값이 행렬처럼 존재한다고 하면 오른쪽 그래프처럼 10의 값을 갖고 있는 픽셀 6개, 20의 값을 갖고 있는 픽셀 4개, 50의 값을 갖고있는 픽셀 7개, 90의 값을 갖고있는 픽셀 3개 로 나타낼 수 있다. 이런 히스토그램을 이미지에 적.. 2020. 6. 25.