전체 글 48

[opencv_python] 5. 이미지 컬러스페이스 (BGR,HSV,YUV)

저번 포스팅에 이어 opencv로 기하학적 변환 두 번째 공부를 진행해보겠습니다. 이번 강의에는 이미지의 컬러 스페이스를 다뤄보겠습니다. 저는 Visual studio code와opencv 4.5.5 버전을 이용하였습니다. Color 이미지와 다양한 색공간 opencv에서 이미지를 불러오게 되면 기본적으로 BGR 순서의 컬러 스페이스를 사용하고 있습니다. 컴퓨터로 이미지 색상을 표현하는 방법 중 제일 많이 사용되는 것이 RGB(Red, Green, Blue)입니다. opencv 는 반대 순서를 사용하고 있죠. import cv2 import matplotlib.pyplot as plt img = cv2.imread('torr.jpg',) plt.axis('off') plt.imshow(img) plt.s..

[Algorithm] python 알고리즘 관련 주요 라이브러리

오늘은 python에서 알고리즘 문제를 풀 때 도움이 되는 주요 라이브러리와 함수 등에 대해서 공부해보도록 하겠습니다. 내장 함수 sum( ): iterable 객체가 입력으로 주어졌을 때, 원소의 합을 반환 iterable : 반복가능한 객체 [ 리스트, 딕셔너리, 튜플, set 등 ] result= [1,2,3,4] print(sum(result)) 출력 : 10 max( ) : 2개의 파라미터 중 가장 큰 값을 반환 a = 10 b = 20 print(max(a,b)) 출력 : 20 min( ) : 2개의 파라미터 중 가장 작은값을 반환 a = 10 b = 20 print(min(a,b)) 출력 : 10 eval( ) : 수학 수식이 문자열 형태로 들어오면 해상 수식을 계산한 결과를 반환 resul..

[Algorithm] 정렬 알고리즘 with python

'정렬 알고리즘' 이란 정렬 알고리즘은 섞여있는 데이터를 순서대로 나열하는 것을 뜻합니다. 대표적인 정렬 종류 O(n²)의 시간 복잡도 (정렬할 자료의 수가 늘어나면 제곱에 비례해서 증가) 1. 버블 정렬(Bubble Sort) 2. 선택 정렬(Selection Sort) 3. 삽입 정렬(Insertion Sort) O(n log n)의 시간 복잡도 1. 병합 정렬(Merge Sort) 2. 퀵 정렬(Quick Sort) 1. 버블 정렬 (Bubble Sort) 버블 정렬이란 인접한 두 수를 비교하며 정렬해 나가는 방법으로 O(n²)의 느린 성능을 가지고 있습니다. 구현은 쉽지만 효율성이 가장 떨어지는 알고리즘입니다. arr = [6,5,3,1,8,7,2,4] for j in range(0,len(arr..

[Algorithm] 투포인터(Two Pointer) 알고리즘 with python

'투포인터' 란? 이름 그대로 두 가지의 포인터를 사용하여 문자열이나 배열(or 리스트)에서 원하는 값을 찾거나 반복문을 써야할 때 쓰기 좋은 방식입니다. 그냥 기본 방식인 탐색(반복문)을 쓰다 보면 시간이 오래 걸리거나 시간 초과가 걸리는 경우에 투포인터를 사용하면 메모리와 시간 효율성을 높일 수 있습니다! 시간복잡도 : O(N) 기본 탐색 반복문을 사용한다면 O(N^2) 투포인터는 2가지 방식이 있습니다 앞에서 시작하는 포인터와 끝에서 시작하는 포인터 빠른(Fast runner)가 느린 (slow runner)보다 앞서는 형식 형식 1. 앞에서 시작하는 포인터 끝에서 시작하는 포인터 쉬운 예제를 통해서 한번 이해해보도록 하겠습니다. Q . 주어진 배열에서 합이 27인 경우를 찾아라 풀이 1. 시작점(..

[Algorithm] 슬라이딩 윈도우(Sliding Window) 알고리즘 with python

'슬라이딩 윈도우' 란 윈도우(특정 범위)가 있을때 윈도우 내부 요소의 값을 이용하여 문제를 풀이하는 알고리즘입니다. 아래 그림을 참조하면 조금 더 쉽게 이해하실 것입니다. 예를들어 [1,3,2,6,-1,4,1,8,2] 라는 배열이 있는데, 연속적인 5개의 숫자의 합이 최대의 값을 구한다고 가정을 해봅시다. [1,3,2,6,-1],4,1,8,2 합 : 11 1,[3,2,6,-1,4],1,8,2 합 : 14 1,3,[2,6,-1,4,1],8,2 합 : 12 1,3,2,[6,-1,4,1,8],2 합 : 18 1,3,2,6,[-1,4,1,8,2] 합 : 14 이런 식으로 구해볼 수 있겠죠 ? 지금은 배열이 짧아서 하나씩 구해볼 수 있지만 배열이 30개, 연속적인 숫자 2개의 합을 구하라하면 일일히 계산해서 할..

[opencv_python] 4.2 기하학적 변환 (자르기(ROI), 어핀변환,원근변환 )

저번 포스팅에 이어 opencv로 기하학적 변환 두 번째 공부를 진행해보겠습니다. 이번 강의에는 크기조절, 자르기, 기하학적의 기본 바탕이 되는 아핀 변환, 원근 변환을 공부해보도록 하겠습니다. 저는 Visual studio code와opencv 4.5.5 버전을 이용하였습니다. 자르기(Slice) 자르기(Slice)는 영상이나 이미지에서 특정 영역을 잘라내는 연산이라고 보시면 됩니다. 특정 영역을 잘라내는 것을 ROI (Region Of Interest) 라고 하며, 이미지상 관심 있는 영역이라고 보시면 됩니다. 관심 영역만 잘라 알고리즘을 적용한다면, 불필요한 연산이 줄어들게 되겠죠? import cv2 img = cv2.imread('./img/torr.jpg') cp = img[150:250, 1..

[opencv_python] 4.1 기하학적 변환 (대칭, 회전, 확대, 축소 )

저번 포스팅에 이어 opencv로 기하학적 변환을 진행해보도록 하겠습니다. 기하학적 변환(geo-metric transform)은 영상의 좌표에 기하학적인 연산을 가해서 변환된 새로운 좌표를 얻는 것을 말합니다. 쉽게 말해 이미지를 구성하는 픽셀 좌표값이 위치를 재배치하는 과정이라고 보시면 됩니다 :) 저는 Visual studio code와opencv 4.5.5 버전을 이용하였습니다. 대칭(Flip, Symmetry) 대칭은 상하대칭 or 좌우 대칭 2가지 방법이 있는데, 변환할 행렬(이미지)에 대해 2x2 행렬을 왼쪽곱샘을 진행해하면 됩니다. 즉 '->' 형태의 물체에 Y축 대칭을 적용한다면 '

[opencv_python] 3. 이벤트 처리 (키보드, 마우스, 트랙바)

저번 포스팅에 이어 opencv로 도형을 그리는 예제를 공부해보도록 하겠습니다. 저는 Visual studio code와opencv 4.5.5 버전을 이용하였습니다. opencv의 영상 출력을 진행하고 출력되는 창에서 발생하는 키보드 입력, 마우스 입력 이벤트 등을 사용자에게 전달하는 인터페이스를 제공하며, 이를 이용해 사용자 입력을 실시간으로 처리할 수 있는 프로그램을 만들 수 있습니다. 키보드 이벤트 앞의 블로그에서 사용본적 있는 cv2.waitKey() 함수는 키보드의 입력을 알아낼 수 있습니다. cv2.waitKey(delay) Parameters delay: 밀리초 단위의 지연입니다. 0은 "영원히"를 의미하는 특별한 값입니다. 이 함수는 delay인자에 밀리초 단위로 숫자를 전달하면 해당 시간..

[opencv_python] 2. 도형 및 TEXT 그리기

저번 포스팅에 이어 opencv로 도형을 그리는 예제를 공부해보도록 하겠습니다. 저는 Visual studio code와opencv 4.5.5 버전을 이용하였습니다. opencv의 다양한 api 함수를 통하여 여러 도형을 그릴 수 있습니다. 도형 그리는 법은 이미지나 동영상에서 자기가 원하는 영역을 찾은 후 사용자가 편하게 인식하기 위해 목적으로도 사용됩니다 :) 빈 이미지 제작 먼저 어떠한 배경에 도형이나 그림을 그리기 전에 500x500 픽셀 크기의 하얀 이미지를 제작해보려 합니다. import cv2 import numpy as np img = np.full((500,500,3), 255, dtype=np.uint8) cv2.imwrite('blank_500.jpg', img) 위 코드를 보시면 N..

[opencv_python] 1. 이미지 및 동영상(카메라) 읽어오기

이번 포스팅부터는 영상 처리 라이브러리 중 제일 유명한 opencv를 공부하며 알아보도록 하겠습니다. 저는 Visual studio code 와 opencv 4.5.5 버전을 이용하였습니다. 이미지 읽기 가장 기본적인 이미지를 읽는 예제입니다. import cv2 import sys path = 'torr.jpg'# 표시할 이미지 경로 ---1 img = cv2.imread(path, cv2.IMREAD_COLOR)# 이미지를 읽어서 img 변수에 할당 ---2 if img is None:# 이미지가 잘불러왔는지 확인 sys.exit("Could not read the image.") cv2.imshow("Display window", img)# 읽은 이미지를 화면에 표시 --- 3 cv2.waitKey..