분류 전체보기 387

230619-25 스터디

교재 9, 10장 공부 - 9장 에지 검출과 응용 9.1 에지 검출 - 에지: 한쪽 방향으로 픽셀 값이 급격하게 바뀌는 부분, 어두운 영역에서 갑자기 밝아지거나 또는 반대로 밝은 영역에서 급격하게 어두워지는 부분 - 에지를 통해 객체의 윤곽을 알아낼 수 있음 - 미분을 통해 변화량이 갑자기 바뀌는 부분을 뽑아냄 - 에지의 방향: 그래디언트 벡터와 수직인 방향을 표시한 것 - 소벨 필터(Sobel filter) 마스크: 여러 가지 방법의 미분 근사 마스크가 개발되었지만 그중 가장 널리 사용되고 있는 미분 마스크 - OpenCV는 소벨 마스크를 이용하여 영상을 미분하는 Sobel() 함수를 제공 - sobel_derivative() 함수 실행 결과 -..

230612-18 스터디

교재 7, 8장 공부 - 7장 필터링 7.1 영상의 필터링 - 필터링 영상 처리에서 필터링(filtering)이란 영상에서 원하는 정보만 통과시키고 원치 않는 정보는 걸러 내는 작업 ex) 잡음 제거, 부드러운 성분 제거해 날카로운 느낌의 영상 만들기- 마스크 (== 커널, 윈도우 or 가끔 필터) 작은 크기의 행렬, 다양한 크기와 모양 행렬의 원소는 보통 실수로 구성 마스크 행렬을 어떻게 정의하는가에 따라 영상을 전반적으로 부드럽게 만들 수도 있고, 반대로 날카롭게 만들 수도 있음 - 고정점 현재 필터링 작업을 수행하고 있는 기준 픽셀 위치 대부분의 경우 마스크 행렬 정중앙을 고정점으로 사용 - 마스크를 이용한 필터링 연산 기법 (마스크, 입력 ..

230522-28 스터디

교재 5, 6장 공부 - 5장 영상의 밝기와 명암비 조절 5.1 영상의 밝기 조절 - 그레이스케일 영상 만드는 3가지 방법 → 그레이스케일로 영상을 불러오기 Mat img1 = imread("lenna.bmp", IMREAD_GRAYSCALE); 두번째 인자에 IMREAD_GRAYSCALE을 넣어 그레이스케일로 변경하도록 함. → 프로그램 동작 중 그레이스케일 영상을 저장할 새로운 Mat 객체 생성하기 Mat img2(480, 640, CV_8UC1, Scalar(0)); CV_8UC1 타입의 객체를 생성 → 이미 3채널 컬러 영상을 가졌고, 이 영상을 그레이스케일로 변환하기 cvtColor(); 함수 사용 - 영상의 밝기 조절: 영상의 전체적인 ..

230515-21 스터디

교재 3, 4장 공부 - 3장 OpenCV 주요 클래스 3.1 기본 자료형 클래스 픽셀의 좌표를 표현, 2차원 좌표를 나타내는 x, y를 멤버 변수로 가져 2차원 평면 상의 점의 좌표를 표현 Point_와 같이 자료형을 명시해야하지만 클래스 이름 재정의해 사용도 가능 (Point2i 클래스, Point2f 클래스 ...) .dot() 함수를 통해 두 점의 내적을 구할 수 있음 ( .dot(), .ddot(), .cross(), inside() ) Point 객체끼리 ==, != 연산자를 이용하여 두 점이 같은지 다른지도 알 수 있음 (결과는 bool) Point 객체를 cout으로 출력하면 그 점의 좌표가 출력됨 영상 또는 사각형 영역의 크기를 표..

게임 맵 최단거리 - 프로그래머스, c++

- 문제 풀이 깊이/너비 우선 탐색 (DFS/BFS) 을 사용하는 문제였다. 더 빨리 최단 거리의 길을 찾기 위해 그 중에서도 너비 우선 탐색(BFS)을 사용했다. 1. 필요한 배열, 큐 등을 선언한다. - visited[] 배열을 선언해 해당 노드에 이미 방문했는 지 안 했는 지 확인할 예정 - 큐로 사용할 vector or queue 선언 2. BFS 함수를 만든다. - 인자로 받은 노드를 visited = true로 바꿔주고 큐에 해당 노드를 넣기 - while문을 통해 큐가 비어있을 때까지 탐색 3. main 에서 연결된 노드끼리를 연결한다. 4. main 에서 탐색을 시작하고 싶은 노드를 넣어 BFS 함수를 실행한다. - 코드 제출한 코드는 다음과 같다. (코드 참고: ..

프로그래머스 2023.02.20

타겟 넘버 - 프로그래머스, c++

- 문제 풀이 "깊이/너비 우선 탐색 (dfs/bfs)"를 사용하는 문제였다. 그 중에서도 깊이 우선 탐색 (DFS)를 사용했다. 1. 주어진 numbers 숫자 개수 만큼 깊이의 트리(벡터)를 만들고, 2. 깊이 우선 탐색을 통해 트리(벡터)의 끝까지 탐색해 가면서 +, - 계산을 하고 원하는 값과 같으면 +1을 하며 탐색하는 방식을 생각했다. - 코드 제출한 코드는 다음과 같다. #include using namespace std; // numbers 벡터, 정답횟수, 찾아야 하는 숫자, 들어간 깊이, 현재까지 합 void dfs(vector& numbers, int& answer, int target, int count = 0, int sum = 0){ // 마지막 깊이까지 순회했다면 if (cou..

프로그래머스 2023.02.14

전력망을 둘로 나누기 - 프로그래머스, c++

- 문제 풀이 "완전 탐색"을 사용하는 문제였다. 완전 탐색 중에서도 bfs를 구현해 문제를 해결했다. - 코드 제출한 코드는 다음과 같다. 1. 주어진 데이터들을 vector에 넣어 탐색할 수 있도록 한다. 2. 두 점을 넣어 bfs 탐색을 통해 두 점사이에 연결된 점들의 개수를 구한다. 3. n - (2 * sum) 공식을 통해 연결된 점끼리의 차이 값을 계산, 그 중 가장 min 최솟값을 구한다. #include #include using namespace std; // 탐색에 필요한 벡터 선언 vector m[200]; // bfs 함수 (점togo부터 점now까지 탐색하며 이어진 점 개수 세기) int bfs(int togo, int now, int count) { for (int i = 0; ..

프로그래머스 2023.02.12

주식가격 - 프로그래머스, c++

- 문제 풀이 "스택"를 사용하는 문제였다. (하지만 나는 중첩 for문을 사용하여 해결했다. 구글에 서치를 해보니 중첩 for문을 사용하는 풀이도 알고리즘 복잡도 등의 면에서 나쁘진 않은 것 같다.) - 코드 제출한 코드는 다음과 같다. #include #include using namespace std; vector solution(vector prices) { // 필요한 변수 선언 vector answer; // 중첩 for문 돌며 가격 떨어지지 않는 기간 계산 for(int i=0; i

프로그래머스 2023.02.10