전체 글 147

C++ - MFC 개요

운영체제 컴퓨터 주기억장치에 상주 컴퓨터 시스템의 자원관리 응용프로그램 수행제어 사용자와 컴퓨터 HW 간의 인터페이스 담당 관리하는 자원 - CPU, 기억장치, 입출력장치 등 윈도우 운영체제의 특징 Graphic User Interface 메시지 구동 구조 멀티 태스킹 - 운영체제가 여러 개의 응용 프로그램을 동시 실행, 멀티스레딩 - 응용 프로그램 내부에서 여러 개의 스레드를 통해 실행 윈도우 으용프로그램의 특징 윈도우 API 윈도우 운영체제가 응용 프로그램을 위해 제공하는 각종 함수의 집합 -> HW를 제어하는데 필요한 함수 사용 메세지 핸들러 집합 - 메세지 핸들러는 메시지를 받았을 때 동작을 결정하는 코드 -> 메세지 핸들러 집합을 윈도우 프로시저라 부름 실행 파일과 DLL 집합 - DLL(Dyn..

C++ - 전처리기 지시어(조건부 컴파일)

C++ 실행 파일 만들어지는 순서 전처리 -> 컴파일 -> 오프젝트 파일 생성 -> 링커에 의해 실행파일 생성 전처리 위 순서 중 전처리는 컴파일 하기 전 소스 파일 내에 존재하는 전처리 지시어를 처리하는 작업을 뜻한다. 특징은 #기호가 붙는다. 조건부 컴파일 소스파일 중 조건에 부합하는 소스만 컴파일 하는 방법이다. 대표적으로 #if, #ifdef, #elif 등이 있다. 그 중 ifdef는 상수가 정의 되어 있다면 참이고 컴파일 한다. 아래는 예제이다. #define A 100 #ifdef A //실행된다. 나머지는 기존의 if else문 처럼 사용하면 된다.

C++ - Windows API와 MFC

Windows API API는 Windows의 OS가 제공하는 함수들이며 OS가 직접 사용하는 함수들이다. 즉 OS나 시스템 프로그래밍과 직접 통신해야 하는 저수준 프로그래밍 에서는 필수적이다. 특히 MFC는 Windows API 함수를 기반으로 만들어진거기 때문에 MFC를 사용하기 위해서는 반드시 알아야한다. BOOL : 단일 논리값 ex) 0,1 HANDLE : 커널 객체를 다루기 위한 핸들 ex) pointer와 비슷 DWORD : 정수(int) TCHAR : 문자(char) LPTSTR : 문자열(TCHAR * ) MFC 자료형 COLORREF : RGB값을 나타낼 수 있는 자료형이다. 아래는 예시이다. COLORREF colorValue = RGB(255,255,255); CString : MF..

MFC - CRuntimeClass

기능 클래스 이름을 사용하지 않고 객체를 생성한다. 메모리 상에 객체의 자료형을 검사한다. 메모리 상에 객체의 유효성을 검사한다. 객체 직렬화(Serialization)에 대한 정보를 제공한다. 사용조건 CRuntimeClass 구조체를 이 기능을 사용하려는 클래스의 static 멤버변수로 입력 CRuntimeClass 구조체를 static 멤버변수로 사용하기 위해 3가지 매크로 이용 선언부 : DECLARE_DYNAMIC, DYNCREATE, SERIAL 정의부 : IMPLEMENT_DYNAMIC 나머지 같음 뒤의 매개변수에 따라 기능이 달라짐 CObject로부터 상속받아야 한다. (CObject는 MFC의 최상위 클래스) MFC 내부에서 CRuntimeClass를 이용하는 객체에 접근할 때, CObj..

YOLO - Colab 이용해서 Custom 학습하기 (3)

파이썬을 이용하는 다른 플랫폼에 적용시키기 darknet에서만 사용하는 것이 아닌 라즈베리파이, 웹사이트, 모바일 등에 적용할 수 있다. 준비물은 3가지이다. CFG 파일 훈련된 weight 파일 names 파일 라이브러리와 YOLO 로드 import cv2 import numpy as np from matplotlib import pyplot as plt net = cv2.dnn.readNet("yolov4_19000.weights", "yolov4.cfg") #CFG 파일, weight 파일을 넣어준다. classes = [] with open("food30.names", "rt",encoding = "UTF8") as f: #클래스 이름을 따로 저장해준다. 이 형식은 클래스가 한글이름 일 때 불러오..

백준 - 마법사 상어와 파이어스톰 (C++)

문제 : www.acmicpc.net/problem/20058 20058번: 마법사 상어와 파이어스톰 마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c www.acmicpc.net 문제설명 단순 구현 시뮬레이션 문제이다. 배열 회전하는 방법과 BFS를 사용하면 쉽게 풀 수 있다. 알고리즘 1. 배열을 스캔하며 나눠진 구역마다 회전해준다. 회전 방법은 코드에 주석처리 해놨다. 2. 회전 후 인접한 4방향을 탐색하고 조건을 실행한다. 3. 모든 명령을 마친 후 BFS을 통해 가장 큰 덩어리의 개수를 구한다. 주의사항 1. 구역을 나누고 회전하는 부분이 까다로웠는데..

백준 - 마법사 상어와 토네이도 (C++)

문제 : www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 문제설명 단순 구현 시뮬레이션 문제이다. 알고리즘 1. 문제 설명에 나와있는 5x5의 흩날리는 비율을 각 토네이도 방향마다 적용시켜준다. 2. 4방향 모두 만들어준다. 3. 토네이도를 이동하며 방향에 맞는 배열을 적용시켜 계산한다. 주의사항 1. 구현 문제는 조건을 주의해야한다. 조건을 미리 종이나 메모장에 적어논 다음 코딩하는 것이 실수를 줄이는 방법같다. 2. 4방향..

YOLO - Colab 이용해서 Custom 학습하기 (2)

YOLO를 훈련시키려면 필요한 3가지 데이터가 있다. 1. data 2. cfg 3. weight 1. data 만들기 data는 이런 형식을 가진다. classes는 훈련하려는 객체 개수 train은 훈련에 사용되는 이미지의 경로 valid는 평가에 사용되는 이미지의 경로 names는 객체의 이름 backup은 훈련된 weight를 저장하는 경로이다. 좀더 자세히 살펴보자면 data의 하위폴더에 txt와 names 파일이 존재한다. 이 파일들의 형식은 다음과 같다. 여기서 주의할 사항은 폴더경로를 잘 설정해줘야한다. train.txt에서 경로/번호/음식사진.jpg 로 설정되있다. 즉 번호에 names의 index와 같은 음식 사진이 들어가야한다. 위를 예로 들자면 names의 첫번째 index가 밥 -..

YOLO - Colab 이용해서 Custom 학습하기 (1)

자율 프로젝트에서는 YOLO를 Colab 환경에서 사용하기로 했다. Colab 환경에서의 장점은 성능 좋은 GPU를 무료로 사용 가능한 점과 환경 구축이 간편한 점이다. 단점은 학습 데이터를 구글 드라이브에 넣어야하는데 용량이 부족하고 동기화 반응이 느리다. 또한 무료로 12시간만 사용 가능하기 때문에 오랜시간 학습이 필요한 모델을 훈련하는데 제약이 있다. 그러나 몇일 걸리는 환경을 단 몇 시간만에 구축할 수 있다는 점은 매우 큰 메리트인 것 같다. Colab에 Darknet 설치 1. 구글 드라이브 접근 from google.colab import drive drive.mount('/content/gdrive') 2. cudnn 설치 GPU에 맞는 cudnn을 설치해야한다. 2020-10..

728x90