본문 바로가기

분류 전체보기195

[C++ opencv] High pass filter (HPF)로 윤곽선 검출, edge detection 본문 목표 저번 포스터에서 Low pass filter를 다뤘고, 영상에서 노이즈 제거를 함을 알아봤다. 이번에는 비슷한 개념이면서 다른 High pass filter를 이해해보고, 어느 상황에서 사용하는지 알아보자. 키워드 : high pass filter, HPF, 고주파 통과 필터, 라플라시안, 라플라시안-가우시안, sobel 알아볼 함수 원형 - 고역주파수 통과 필터 ( High pass filter ) GaussianBlur(img, img_gaussian, Size(3, 3), 0, 0, 4); Sobel(img_gaussian, img_sobel_x, CV_8U, 1, 0, 3, (1.0), (0, 0), 4); Sobel(img_gaussian, img_sobel_y, CV_8U, 0, 1.. 2020. 7. 15.
[C++ opencv] low pass filters (LPF)로 노이즈 제거하기 본문 목표 영상처리에서 노이즈제거는 매우 중요하다. 앞선 포스트에서 평균필터(average filter)와 가우시안 블러(gaussian blur)를 다뤘었다. 이번에는 보다 전문적으로 노이즈 제거 방법에 대해서 알아보도록 한다. 그리고 영상처리에 있어서 low pass filter는 노이즈 제거라는 것을 이해한다. 키워드 : low pass filter, average filter, gaussian filter, median filter, bilateral filter 알아볼 함수 원형 - 필터 적용 ( filter2d ) blur(img, img_blur, Size(5, 5), Point(-1, -1), BORDER_REFLECT); GaussianBlur(img, img_gaussian, Size(.. 2020. 7. 15.
[C++ opencv] 이미지 사이즈 변경하기, resize( ) 함수 사용법 본문 목표 연산속도를 빠르게 하기위해서 RGB 색 채널보다는 Grayscale을 사용한다. 그런데 이보다 더 연산속도를 빠르게 할 수 있는 방법은 이미지 사이즈를 줄이는 것이다. opencv에서 제공하는 이미지 사이즈 변경 방법에 대해서 알아보자. 키워드 : resize , 보간법 알아볼 함수 원형 - 이미지 크기 변경 ( Resize ) ... Mat img = imread("Lenna.png"); img_small; resize(img, img_small, Size(200, 200)); ... resize( src, dst, Size(cols, rows) ) ○ src : 입력할 이미지 변수 ○ dst : 필터가 적용되어 저장될 이미지 변수 ○ Size(cols, rows) : 변환시킬 이미지의 크기.. 2020. 7. 14.
C언어 기초 - 쓰레드 이해하고 사용하는 방법 본문 목표 코드를 여러개 동시에 돌리고 싶을 때, 사용하는 것이 쓰레드이다. 쓰레드의 원리를 이해하고, 사용방법을 알아보자. 개념 정리 코드는 하나만 돌아가는 것이 기본이다. 그런데 성능 좋은 컴퓨터에서 여러개를 동시에 처리하지 못하는 것 만큼 제값 못하는건 또 없다. 여러개를 동시에 처리하기 위한 개념이 쓰레드이다. 다시말해서 코드는 하나 실행했는데, 작동되는 기능이 2개 이상 되게 하는 것이 쓰레드이다. 아두이노 같은 임베디드 보드를 사용하면 우리는 loop( ) 또는 while(1) 처럼 무한 반복문 안에다가 코딩을 하고, 계속 반복을 돌리게 한다. 그런데 기능을 두가지를 동시에 하게 하고 싶으면 timer 기능을 사용하게 된다. 예를 들어, 타이머를 시작해두고, 100ms 마다 1번 기능의 whi.. 2020. 7. 9.
C언어 기초 - 헤더파일 만드는 방법과 사용하는 방법 본문 목표 프로젝트가 복잡하고 규모가 클 수록, 코드가 많이 길어지게 된다. 코드가 길어지면 가독성이 떨어지게 된다. 가독성이 떨어지면, 코드 개발이 복잡해지고, 오류가 발생할 확률이 높고, 오류를 잡기 힘들어진다. 따라서 가독성을 높이기 위해서는 여러개의 소스파일을 사용한다. 여러개 소스파일을 만들고, 사용하는 방법을 헤더파일을 통해 알아보자. 개념 정리 학창시절 공부를 한다고 했을 때, 단원별로 공부를 하고, 개념노트를 만들곤 했을 것이다. 프로그래밍도 마찬가지로, 계속 개발할 수록 비슷한 것들 끼리 묶어서 저장하는 것이 좋다. 나중에 찾아보기도 쉽고 이해하기도 쉽기 때문이다. 노트 하나에 수학, 물리, 화학을 한꺼번에 정리하면 완전 뒤죽박죽이 되어서 알 수 없듯이 프로그래밍도 소스파일 하나에 개발을.. 2020. 7. 8.
C언어 기초 - 포인터 와 주소 이해하기, pointer 본문 목표 C언어의 핵심 중 하나가 '포인터' 이다. 포인터를 사용할 줄 알아야 C언어를 통해서 개발을 수월하게 할 수 있다. 단순히 변수를 사용하면 해당 소스 파일에서만 사용이 가능한데, 다른 외부 소스 파일에서 해당 변수 값을 참조할 때 사용하는게 '포인터'이다. 메모리 주소에 대해서 이해하여 포인터가 무엇인지 이해하고 사용하는 방법을 알아보자. 개념 정리 포인터는 영어로 'pointer' 이다. 뜻을 생각해보면, '가르키는 것' 이라고 할 수 있겠다. 실제로 C언어에서의 포인터는 해석 그대로의 개념이다. 가르키는 것인데, 무엇을 가르키냐면 바로 '메모리 주소 값' 이다. 컴퓨터의 RAM 이라는 부분을 메모리라고 하는데, 그 메모리에 우리가 사용하고자 하는 변수들이 저장 되는 것이다. 우리가 char.. 2020. 7. 8.
수원 대왕칼국수 - 저렴하면서 푸짐한 칼국수 맛집 Today 업무상 수원에 들릴 일이 있어서 왔다가 점심을 해결하기 위해서 뭘 먹을까 고민하던 중 아무리 생각해도 왕갈비는 무리인거 같고... 뭐먹지 하다가 생각난 것이, 국수! 인터넷을 찾고 찾아서 유명한 곳을 찾아보았고, 대왕칼국수 평이 괜찮아서 들리게 되었다. Exterior 외관은 누가봐도 낡은 식당 같이 생겼다. 뭔가 양도 많이 줄것같고, 인심이 후할것 같은 느낌이다.ㅎㅎ Interior 내부는 그냥 딱 외관과 잘 매치가 되는 분위기이다. 내부가 좀 좁고, 테이블 수가 적어서 사람이 좀만 와도 금방 다 차게 생겼다. 테이블 수는 한 6~8개 정도? 정확히 세어보지는 못했다. Menu 내가 주문한 칼국수~ 메뉴 이름은 중특 이다. 신기한 메뉴 이름이다. 김치는 자신이 먹을만큼 담아서 먹을 수 있다... 2020. 7. 7.
갤럭시 탭을 PC용 타블렛으로 사용하는 방법, virtual tablet 요즈음 대학생이라면 태블릿 PC는 한대쯤은 갖고 다니는 것 같다. 물론 성인들도 영상시청시간이 많아짐에 따라 태블릿PC를 많이 사용하고 있는 추세이다. 하지만 값비싼 태블릿PC를 사서 영상시청이랑 웹서핑만 하는데 사용한다면, 그 값어치를 제대로 못하는게 아닌가 싶다. 윈도우에서 어도비 계열 프로그램( 포토샵, 일러스트 등)을 사용하시는 분들에게 좋은 소식이 있다. 바로, 태블릿 PC를 이용해서 태블릿으로 이용하는 방법이 있다는 것이다. 태블릿은 그림그리는 사람들의 전유물로 인식되어 왔지만, 이제는 강의 또는 노트하는데에도 사용하면 편한 시대가 도래했다. 갤럭시탭 처럼 전용 S펜이 있고, 버튼이 있다면 그 활용도는 더 높아진다. https://play.google.com/store/apps/details?.. 2020. 7. 6.
C언어 기초 - 사용자 정의함수 만들기 본문 목표 저번 포스팅까지 해서 자료형, 조건문, 반복문까지 핵심적인 것들은 다 다뤄보았다. 이번에는 다음으로 중요한 사용자 정의함수를 만드는 것을 이해하고 자신의 함수를 만들어 사용해본다. 개념 정리 사용자 정의 함수는 프로그램에서 제공하는 기본 함수들을 이용하여 새롭게 함수를 만드는 것이다. 원할 때, 호출해서 사용할 수 있으며, 코드를 단순히 할 때 필수적이다. 코드가 단순해야 나중에 문제가 생겨도 쉽게 원인을 파악할 수 있어서 중요하다. 사용자 정의함수 만들기 전에 자료형을 다시 살펴보자. return 0; 을 쓸때는 뭐고 return; 을 쓸때는 뭔지 모른다면 집중하시길! 자료형을 간단히 하자면 void - 없음 char - 작은 정수 또는 문자 short - 크기가 작은 정수 int - 정수 .. 2020. 7. 6.
C 언어 기초 - 반복문 for 이해하기 본문 목표 C언어에서 반복문은 for 와 while 이 있다. 이번에는 반복문 for 을 이해하고, 사용법을 알아보자. 개념 정리 반복문의 기초는 반복의 '조건' 이 '참' 이면 반복을 하는 것이다. for는 정수형 변수를 사용하여 조건을 세우는 대표적인 반복문이다. (while은 논리 연산, 관계 연산 다 사용가능 한 것과 제일 큰 차이점이다.) 물론 조건 자리에 들어갈 연산은 그 어느것이 와도 되지만, 그렇게 사용하지는 않는다. 기본 형태는 다음과 같다. for(변수 선언 또는 초기화 ; 조건식 ; 증감식) { 반복할 코드 } 변수 선언 또는 초기화 - 이 부분에서 변수를 선언하고 초기화 해도 된다. ex) int i = 0 - 변수가 이미 선언 되어 있다면 초기화를 한다. ex) i = 0 조건식 .. 2020. 7. 6.
C언어 기초 - 반복문 while 이해하기 본문 목표 C 언어를 다루는데에 있어서 중요한것은 3가지라고 할 수 있다. 1. 자료형(변수) 2. 반복문 3. 조건문 이렇게 세가지만 잘 다룰 줄 알아도 대부분의 프로그램 알고리즘을 실현시킬 수 있다. 이번 포스팅에서는 반복문을 다루려고 한다. 반복문 중에서 for 이 있고, while 이 있는데 while 을 먼저 다뤄보려한다. while을 이해하고 사용방법을 알아가는 것이 이번 포스팅의 목표이다. 개념 정리 반복문은 코드 실행에 있어서 반복적으로 실행시키게 하는 것이다. 모든 반복문은 조건을 갖고 있고, 해당 조건에 충족한다면 반복연산을 실시한다. while 역시 조건문이 필요한데, 조건문은 괄호 안에 들어간다. while( 조건 ) { 반복 실행할 코드 } 이런 형식으로 사용한다. 순서도로 살펴보.. 2020. 7. 5.
C언어 기초 - 조건문 if , else if, else 이해하기 본문 목표 조건문은 주어진 조건이 참일 경우 해당 코드를 실행하는 명령이다. 주어진 조건에 따라서 경우의 수를 여러개로 나눌 수 있는데, if, else if, else 가 그렇다. if 를 여러개 사용해도 되지만, 그러면 안 되는 이유는 실행 속도에서 손해를 보기 때문이다. if 는 무조건 조건 검사를 하는데, 이미 해결된 사안이고, 뒤에 있는 거짓이라 필요 없음에도 다 한번씩 두드려보기에 코드 작동 속도에 저하가 생기게 된다. 따라서 올바른 조건문을 사용할 줄 알아야 한다. 개념 정리 if, else if, else 의 사용 방법은 아래와 같다. if ( 조건1 ) { 조건 1이 참이면 실행 } else if ( 조건2 ) { 조건 1이 거짓이고, 조건 2가 참이면 실행 } else if ( 조건3 .. 2020. 7. 5.
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.