이미지 위에 임의의 4점을 선택하면 그 구역 내 이미지를 원근 변환하는 코드를 작성해보았다. homograpyTransformation 함수를 통해 4점을 입력받으면 calPoint 함수로 상하좌우를 지정해주기 때문에 전처럼 "좌상 → 좌하 → 우상 → 우하" 순으로 점을 찍지 않아도 되며, 변형 후 각 점의 좌표와 원근 변환한 이미지 크기도 같이 계산해준다. img = cv2.imread('athletic-field-1867053_1920.jpg') count = 0 blue, green, red, yellow = (255, 0, 0), (0, 255, 0), (0, 0, 255), (0, 255, 255) point_array = [] def calPoint(ary): total = np.sum(ar..
데이터 사이언스 사용 설명서 검색 결과
배열 스택(Array Stack)란? 배열을 이용해 구현한 스택을 의미한다. 배열 리스트와 마찬가지로 물리적으로 연결되어있어야 하며 그에 따라 스택을 생성할 때 무조건 스택의 크기를 미리 지정해 주어야 한다. 각 함수 중간에 AS가 있는데 ArrayStack을 의미한다. 배열 스택의 구현 소스 파일 구성은 다음과 같다. 파일 이름 내용 arraystack.h 구조체 및 함수 선언 arraystack.cpp 함수 구현 arraystackmain.cpp main 함수 실행 1.arraylist.h #pragma once #include using namespace std; #define TRUE 1 #define FALSE 0 typedef struct ArrayStackNode { int data; }; ..
연결 리스트로 구현한 스택 앞서 배운 연결 리스트를 이용하여 구현하는 스택이다. 이러한 방식의 스택의 장점은 미리 스택의 크기를 정하지 않아도 되어 실제 사용하는 자료의 양보다 배열의 크기가 더 클 때 발생하는 메모리 공간 낭비가 일어나지 않는다는 점이다. 그러나 구현은 비교적 어렵다. 연결 리스트로 구현한 스택에서는 노드에 대해 위치 인덱스를 이용한 접근이 불가능하기 때문에 앞서 연결 리스트를 구현했을 때 사용한 헤더 노드와 비슷하게 스택의 탑에 위치한 노드에 접근하기 위한 포인터가 필요하고 push, pop 연산을 실행할 때마다 스택의 탑 노드에 대한 링크를 재설정해주어야 한다. 또한 pop 연산 시 기존에 탑 노드가 사라지면 그다음 위에 있는 노드에 접근할 수 있게 스택의 탑 노드부터 맨 아래에 저..
스택(Stack)이란? 영어 단어 stack은 ‘쌓다‘‘쌓다 ‘라는 뜻이 있고 명사로는 물건들이 쌓여있는 '더미'를 의미한다. 자료구조에서의 스택도 자료를 쌓아두는 기능을 한다. 일반적인 ’더미‘’ 더미‘와 다르게 스택은 스택만의 고유 특성을 가지고 있다. 그 특성은 LIFO(Last-In-First-Out) - 후입선출(後入先出), 즉, 가장 나중에 들어간 자료가 가장 먼저 나오는 자료이다'라는 특성이다. 이러한 특성 때문에 스택에서 자료를 꺼낼 때에는 앞서 배운 리스트와 다르게 가장 나중에 들어간 자료만 꺼낼 수 있다. 추가적으로 스택은 선형 자료구조로, 선형의 의미는 저장된 자료들 사이의 선후관계가 모두 1대11대 1 관계라는 뜻이다. 다시말해 하나의 물건 위에는 오직 하나의 물건만을 쌓을 수 있다..
import numpy as np import cv2 import matplotlib.pyplot as plt 2D 이미지 기하학적 변형 (Transformation) → 행렬 변환 1. 강체변환 (Ridid-Body) : 크기와 형태를 유지한 채 위치와 방향을 바꾸는 변환 (ex. 위치변경(Translation), 회전(Rotation)) 2. 유사변환 (Similarity) : 강체변환에 크기의 변환도 허용 (ex. 크기변경(Scaling)) 3. 선형변환 (Linear) : Vector 공간에서의 이동. (회전, 크기변경 및 반전, 밀림도 가능하지만 위치변경은 못한다.) 4. Affine : 선형변환과 이동변환까지 포함. 선의 수평성은 유지 5. Perspective : Affine 변환에서 수평성..
import numpy as np import cv2 import matplotlib.pyplot as plt 2D 이미지 기하학적 변형 (Transformation) → 행렬변환 1. 강체변환 (Ridid-Body) : 크기와 형태를 유지한 채 위치와 방향을 바꾸는 변환 (ex. 위치변경(Translation), 회전(Rotation)) 2. 유사변환 (Similarity) : 강체변환에 크기의 변환도 허용 (ex. 크기변경(Scaling)) 3. 선형변환 (Linear) : Vector 공간에서의 이동. (회전, 크기변경 및 반전, 밀림도 가능하지만 위치변경은 못한다.) 4. Affine : 선형변환과 이동변환까지 포함. 선의 수평성은 유지 5. Perspective : Affine 변환에서 수평성이..
BFMatcher는 특징 디스크립터를 전수 조사하는 것이 특징이며, cv2.BFMatcher()를 사용할 때 상호 매칭까지 하게 되면 작업 속도가 느리다는 단점이 있다. [OpenCV Programming] 디스크립터(Descriptor) 특징을 나타내는 값을 매칭하기 위해서는 회전이나 크기 등에 영향이 없어야 하며, 이를 위해서는 feature descriptor(특징 디스크립터)가 필요하다. 특징 디스크립터는 keypoint의 주변의 밝기나 색상 dsbook.tistory.com 이를 개선한 것이 FLANN(Fast Library for Approximate Nearest Neighbors Matching)이다. FLANN은 가장 가까운 이웃의 근사 값으로 매칭을 수행하며, Machine Learni..
지난 포스팅에서는 주요 칼럼이라고 생각되는 것들과 레이블 데이터인 생존(Survived)의 관계를 시각화하는 과정까지 했다. 레이블 인코딩 이번에는 문자열로 되어있는 데이터, 즉, DataFrame에서는 object 형이라고 표현되어있는 데이터를 숫자형으로 바꿔주는 작업을 할 것이다. 이런 과정을 LabelEncoding이라고 하고, Scikit learn에서는 LabelEncoder 클래스를 통해서 구현할 수 있다. LabelEncoder 객체를 통해서 fit / transform 과정을 거치면 0 ~ (카테고리 유형 수 -1) 까지의 숫자 값으로 변환된다. from sklearn import preprocessing def encode_features(dataDF): features = ['Cabin..
캐글은 세계적인 ML 기반 분석 대회이다. 그 중에서도 타이타닉 생존자 예측은 처음 입문하는 사람들이 하는 튜토리얼이다. 캐글 사이트에서 Titanic을 검색하거나, https://www.kaggle.com/c/titanic에 들어가면 Data 카테고리에서 학습 데이터(train.csv)와 테스트 데이터(test.csv)를 다운 받을 수 있다. 다운받기 전에 로그인을 해야하니 회원가입을 먼저하고 데이터를 다운받으면 된다. 오른쪽에는 해당 데이터에 관한 간략한 정보들이 나와있는 것을 확인할 수 있다. 다운받은 파일은 파이썬 코드 파일( 주피터 노트북일 경우, 해당 .ipynb파일)이 있는 디렉토리에 csv 파일을 저장한다. 이후에 다른 파일들도 train.csv 파일들이 많이 존재하기 때문에, 구별할 수 ..
1. MeanShift MeanShift는 대상 객체의 색상 정보를 평균 이동에 대해 추적하는 알고리즘으로, 연산이 이루어지는 과정은 다음과 같다. 1) 영상에서 추적할 대상을 선정한 후 HSV 컬러 Space의 H(Hue)값 히스토그램 계산 2) 전체 영상을 과정 1의 히스토그램 계산 후 역투영 처리 3) 역투영된 영상에서 MeanShift로 추적 역투영이란 전체 영상의 색상 정보와 대상 객체의 색상 정보의 비율을 0~255 구간 내로 정규화한 것이다. opencv는 히스토그램 역투영 결과에서 평균 이동으로 대상 객체의 위치를 찾아주는 함수 cv2.meanShift()를 지원한다. import cv2 import numpy as np capture = cv2.VideoCapture("video.avi"..
최근댓글