프로그래밍 25

[HW 3]에지 검출과 영역 분할

P1. (SOBEL 에지) 다음과 같은 Grayscale 이미지를 만들어 각각 실험하라. 1) 위와 유사하게 원과 정사각형 도형이 그려진 이미지를 만들어라. import cv2 import numpy as np import matplotlib.pyplot as plt ''' 1) 위와 유사하게 원과 정사각형 도형이 그려진 이미지는 만들어라. ''' #이미지 그릴 배경 그리기 im_circle = np.zeros([500, 500, 3], dtype= np.uint8) im_rect = np.zeros([500, 500, 3], dtype= np.uint8) center = (250, 250) #draw circle #패러미터: 반지름, 색상, 두께 -1(채워진 도형) im_circle = cv2.circ..

[HW 2]히스토그램, 이진 영상, Morphology 필터 & 기하변환

P1. (히스토그램 평활화) 다음 두개의 사진(Unequalized_Hawkes_Bay_NZ.jpg, tsukuba_l.png)에 히스토그램평활화를 적용하려고 한다. 1) 위 사진의 히스토그램을 구하여 그래프로 표시해보라. (GRAY 영상으로 변환 후) ''' 1. 위 사진의 히스토그램을 구하여 그래프로 표시해보라. (GRAY 영상으로 변환 후) ''' imgpath1='histo1.png' imgpath2='histo2.png' #color to gray histo1_gray = cv2.imread('histo1.png', cv2.IMREAD_GRAYSCALE) cv2.imwrite('histo1_gray.png', histo1_gray, [cv2.IMWRITE_PNG_COMPRESSION, 0]) h..

[HW 1]영상처리 기본, Python & OpenCV

P1. (성능평가) 코로나 감염여부를 측정하는 방법으로 체온을 이용한다고 하다. 체온이 일정 수치 T 이상이면 코로나 감염으로 그렇지 않으면 정상인것으로 판단한다고 하자. 이 검사에 참가한 사람들 중 p 의 비율로 환자가, 1- p 의 비율로 정상인이 포함되어 있다고 가정하자. 환자는 체온 40도를 기준으로 표준편차 5의 정규분포를 따른다고 하고, 정상인은 35도를 기준으로 표준 편차 5의 정규분포를 따른다고 하자. 1) p = 0.5 인 경우 임의로 100명을 모집했을 때 (즉, 50명 씩) 두 집단의 체온을 정규 분포에 따라 랜덤 넘버를 생성하라. (참고: https://numpy.org/doc/stable/reference/random/generated/numpy.random.normal.html)..

정렬/탐색

1. 정렬 여러 가지 데이터를 특정 기준에 의해 내림차순/오름차순으로 정렬한다. 여기서는 정수형 데이터를 오름차순으로 정렬한다고 가정한다. ​ 선택정렬 정렬되지 않은 목록에서 가장 큰 수를 찾아 목록의 맨 뒤로 옮기는 것을 반복하는 정렬 방법이다. 삽입정렬 배열의 앞에서부터(이때 이 부분은 정렬되어 있음) 하나씩 인덱스를 늘려가며 새로운 데이터를 기존 정렬된 부분에 순서에 맞추어 끼워넣는 방법이다. 정렬 시작시 "정렬된 부분"은 가장 빠른 인덱스 하나로 정의하고 값이 하나이므로 정렬되었다고 본다. ​ 삽입정렬의 알고리즘은 쉽지만 본인은 이걸 코드로 직접 구현할때 조금 헷갈려했는데, 새로운 데이터를 삽입하기 전 기존 데이터를 한칸씩 shifting 시키는것이 조금 헷갈렸다. 혹시나 마찬가지인 사람은 주석을..

배열

1. 배열 배열(array)는 요소 수가 정해진 동일 자료형 요소의 순차적 집합체이다. 동일한 자료형인 여러 데이터를 다룰 때 쓰인다. 2. 배열의 선언 배열의 선언방법은 다음과 같다. (자료형) (배열명)[배열의 길이]; 예를 들어 int 와 float 자료형을 가지고 크기가 각각 10,15인 배열을 선언하려면 이렇게 하면 된다. 3. 배열의 초기화/원소 접근 배열이 선언되었으면 초기화가 필요하다(C언어에서). 배열 최초 선언시 각 요소에는 쓰레기값이 들어가 있으므로 초기화를 바로바로 해주는것이 좋다. ​ 컴파일 시간 초기화 배열 선언과 동시에 초기화하는 방법이다. 기본적인 문법은 다음과 같다: (자료형) (배열명)[배열의 길이] = {요소1, 요소2....}; 배열 선언문 바로 다음에 대입연산자 = ..

[명품 C++ programming]10,11장 실습문제

단원: 10. 템플릿과 표준 라이브러리(STL) 11. C++ 입출력 시스템 [실습 10.8]문제 7을 푸는 다른 방법을 소개한다. bigger()함수의 다음 라인에서 >연산자 때문에, T에 클래스 타입이 대입될 때 구체화가 실패하여 컴파일 오류가 발생한다. 이 문제를 해결하기 위해 추상 클래스 Comparable이 주어진다. Circle 클래스가 Comparable을 상속받아 순수 가상 함수를 모두 구현하면, 앞의 bigger() 템플릿 함수를 사용하는데 아무 문제가 없다. Circle뿐 아니라, Comparable을 상속받은 모든 클래스를 bigger()에 사용할수 있다. Comparable을 상속받은 Circle 클래스를 완성하고 문제 7의 main()을 실행하여 테스트하라. 코드: #include..

[명품 C++ programming]9장 Open challenge

과제는 아니고 그냥 뭔가 될 거 같아서 풀어본 챌린지 문제 [open challenge]Human의 Food 먹기 게임 게임에는 Human, Monster, Food의 객체가 등장하며, 이들은 10x20 격저판에서 각각 정해진 규칙에 의해 움직인다. Human 객체는 사용자의 키에 의해 왼쪽(a 키), 아래(s 키), 위(d 키), 오른쪽(f 키)으로 한칸씩 움직이고, Monster는 한 번에 2칸씩, 왼쪽, 아래, 위, 오른쪽 방향으로 랜덤하게 움직인다. Food는 5번 중에 3번은 제자리에 있고, 나머지 2번은 4가지 방향 중 랜덤하게 한 칸씩 움직인다. 게임은 Hyman이 Monster를 피해 Food를 먹으면(Food의 위치로 이동) 성공으로 끝나고, Monster가 Food를 먹거나 Human이..

[명품 C++ programming]7,8,9장 실습문제

단원: 7. 프렌드와 연산자 중복 8. 상속 9. 가상함수와 추상클래스 [실습 7.3]다음 연산을 통해 공짜 책인지를 판별하도록 !연산자를 작성하라. 코드: #include using namespace std; class Book { string title; int price, pages; public: Book(string title = "", int price = 0, int pages = 0) { this->title = title; this->price = price; this->pages = pages; } void show() { cout capacity = capacity; mem = new int[capacity]; } ~BaseArray() { delete[] mem; } void put..

[명품 C++ programming]4,5,6장 실습문제

단원: 4. 객체 포인터와 객제 배열, 객체의 동적 생성 5. 함수와 참조, 복사 생성자 6. 함수 중복과 static 멤버 [실습 4.9]다음과 같은 Person 클래스가 있다. Person 클래스와 main()함수를 작성하여, 3개의 Person 객체를 가지는 배열을 선언하고, 다음과 같이 키보드에서 이름과 전화번호를 입력받아 출력하고 검색하는 프로그램을 완성하라. 코드: #include #include using namespace std; class person { string name; string tel; public: person(); string getname() { return name; } string gettel() { return tel; } void set(string name, s..