전체 글

전체 글

    [OpenCV4] C# OpenCV4 윤곽선 검출

    [OpenCV4] C# OpenCV4 윤곽선 검출

    윤곽선 검출 윤곽선 검출은 실제로 template matching 만큼 많이 쓰는것 같다. 활용도가 정말 많아서 알아두면 좋은 기능이다. 아래는 사용 이미지 전후 차이이다. 윤곽선 검출은 활용도가 높지만 구현이 간단하기에 사용하기가 쉽다. 아래 코드를 보자. 사용하고자 하는 이미지를 저장할 Mat인 src와 이미지를 흑백으로 바꿔줄 bin 그리고 실제로 윤곽선을 그려줄 temp에 OpenCV4에서 제공하는 FindContours를 사용하면 간단하다. FindContours 사용방법과 활용도는 지난글의 코드에 달린 주석을 보면 이해하기가 쉬우니 참조하자. https://hyun-jun5.tistory.com/88 [OpenCV4] C# OpenCV4 Contours와 Moment를 이용한 MatchShap..

    [백준 / BOJ] C++ 1676 팩토리얼 0의 개수

    [백준 / BOJ] C++ 1676 팩토리얼 0의 개수

    https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 풀이 팩토리얼 계산을 하게되면 적은숫자면 모르지만 큰수를 입력할 경우 오버플로우 오류가 생긴다. (숫자가 너무 커서) 문제를 풀어서 생각해보면, 0이 아닌 숫자가 나올 때 까지 0의 개수를 구하는것이다. 처음 0이 아닌 숫자가 나오는 경우는 10의 거듭제곱 밖에 없다. 결국 10은 2와 5로 소인수 분해를 할 수가 있다. 숫자는 2부터 입력받은 수까지 반복하며 소인수 분해한 2와 5중 더 작은 개수를 출력하면 된다. Code ( C++ ) #include using namesp..

    [Git / Github] Github 원격 저장소 복제하기

    [Git / Github] Github 원격 저장소 복제하기

    git clone 명령어를 이용한 원격 저장소 복제 처음 원격 저장소를 생성하고 구성한 사람이 아니라면 로컬 저장소에는 원격 저장소와 동일한 프로젝트가 존재하지않는다. 하나의 프로젝트를 대상으로 여러 개발자가 협업하는 경우에는 반드시 일어나는 일이라 이미 생성된 원격 저장소를 로컬로 복제하는 방법을 알아보자. git clone "원격 저장소 주소" "새로운 저장소 이름" Github 리포지토리의 [Code]탭에서 복사모야 버튼을 클릭해 이미 존재하는 원격 저장소의 주소를 복사한다. Git bash Here로 터미널을 실행한 후 git clone 명령어를 실행한다. 만들어져있는 원격 저장소를 복제하였습니다. ls 명령어를 실행하여 저장소가 생성되었는지 확인한다. 이렇게 원격 저장소를 로컬로 복제하여 사용할..

    [백준 / BOJ] C++ 1463 1로 만들기

    [백준 / BOJ] C++ 1463 1로 만들기

    https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 풀이 문제에서 주어지는 조건은 3가지이다. 1. X가 3으로 나누었을때 나누어 떨어지면 3으로 나눈다. 2. X가 2로 나누었을때 나누어 떨어지면 2로 나눈다. 3. 그냥 1을 뺀다. 예시로 확인해보자. 1의 경우는 연산작업이 필요가 없기에 연산 수는 0 2의 경우는 2로 나누어떨어지기에 연산 횟수는 1 3의 경우는 3으로 나누어 떨어지기에 연산회수는 1 10의 경우에는 (10 - 1) / 3 / 3의 연산을 해야하기에 연산 횟수는 3 이를 따라, 점화식을 구해보자면 2의 경우는 dp[i] = dp[i/2..

    [C/C++] 동적할당 malloc, calloc, realloc들의 차이란?

    [C/C++] 동적할당 malloc, calloc, realloc들의 차이란?

    1. malloc return 타입이 void*인 void형 포인터이다. 동적할당을 하게될 경우 return할때의 자료형을 명시할 수 없기에 void 형 시작주소를 return 한다. malloc은 단순히 void형 시작 주소를 반환하기에 우리가 필요한 자료형으로 아래와 같이 형변환해서 사용해주어야한다. 처음 malloc을 하게 되면 할당된 메모리를 초기화 하지않기에, 쓰레기값이 들어있다. malloc 이후 memset 등을 이용하여 메모리 초기화를 시켜주어야한다. 2. calloc return 타입이 malloc과 같은 void형 포인터이다. 동작방식이 매우 비슷하며, 입력 파라미터에 size_t num이 추가되어 있다. 동적 메모리 생성하는 개수를 추가해주어 사용한다. 다만 다른점이 있다면, mall..

    [백준 / BOJ] C++ 2798 블랙잭

    [백준 / BOJ] C++ 2798 블랙잭

    https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 문제 풀이 브루트포스 알고리즘의 가장 전형적인 예이다. 3장의 카드들이 입력된 M보다 작아야하며 가장 큰 수를 완전탐색하면된다. 아주 간단한 문제인 브루트포스 알고리즘 입문 문제이다. 근데 실제로 브루트포스 알고리즘은 나는 잘 안쓰게된다... Code ( C++ ) #include #include using namespace std; int N, M; int ans..

    [OpenCV4] C# OpenCV4 Contours와 Moment를 이용한 MatchShape

    [OpenCV4] C# OpenCV4 Contours와 Moment를 이용한 MatchShape

    Contours란? Contours는 이미지 윤곽을 말한다. 즉, 같은 색이나 강도를 가지는 연속된 점들을 연결시켜놓은 선이다. 등고선 또는 등치선이라고 한다. 그럼 실제로 사용해보도록 하자. 인자로 받아온 Bitmap을 Matrix형태로 변환시켜준 이후, 더 나은 이미지 검출을 위해 이진이미지로 바꿔준다. Threshold는 실제로 바꿔보며 가장 검출이 잘되는 값을 찾아넣어준다. 그리고 검출된 Contours들을 실제로 사용하기위해 반환값으로 사용한 이미지와 검출된 contours, 계층으로 설정해준다. 사용한 이미지는 그림판으로 직접 만든 조잡한 아래의 이미지이다. 그럼 실제로 찾고 그려주는 부분의 코드를 확인해보자 Code ( Contours 만 이용 ) Point[][] contours1; Hie..

    [백준 / BOJ] C++ 1107 리모컨

    [백준 / BOJ] C++ 1107 리모컨

    https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 문제 풀이 브루트포스 알고리즘이다. 문제에서의 함정이있는데, 이동하고자 하는 채널 N은 0 N >> M; for (int i = 0; i > btn; remote[btn] = true; } int result = abs(100 - N); for (int i = 0; i 0) { int b = abs(N - i); if (result >..