openCV

    [C++ openCV 도형 인식] 게임 매직 타일 매크로 [2] (완)

    [파이썬 openCV 도형 인식] 게임 매직타일 매크로(1) 매직타일 매크로 openCV로 뭘 만들까 고민하다가 옛날에 했던 게임 중 하나인 '매직 타일' 생각이 나서 매크로를 만들어 봤다. 매직 타일은 간단한 리듬 게임이다. 매직 타일 소개 영상 보다시피, return-value.tistory.com 윗글을 읽고 오시면 이해가 빠릅니다. 결과 영상 전의 파이썬과 비교했을 때, 확실히 검출해네는 속도가 빨라졌다! 심지어 C++은 의도적으로 딜레이를 30ms정도 준 상태인데도 말이다. 확실히 이런 실시간 싱크 맟추는 것이 중요하다면, C++이 강력한 것 같다. 하지만 C++로 코딩하기는 참 너무 귀찮다.. 해줄게 너무 많다! 그래도 속도만큼은 진짜 탁월한 것 같다. C++ 소스 화면 녹화 부분 참고 코드 ..

    [파이썬 openCV 도형 인식] 게임 매직타일 매크로 [1]

    매직타일 매크로 openCV로 뭘 만들까 고민하다가 옛날에 했던 게임 중 하나인 '매직 타일' 생각이 나서 매크로를 만들어 봤다. 매직 타일은 간단한 리듬 게임이다. 매직 타일 소개 영상 보다시피, 검은색 타일을 화면 내에 있을 때 클릭하면 되는 게임이다. 그래서 구현 자체는 간단할 거라 생각했다. 타일 인식 방법으로 처음엔 템플릿 매칭 방법을 사용했다. 템플릿 매칭 템플릿 매칭은 간단하게 원본 이미지에 템플릿 이미지와 일치하는 영역을 찾는 알고리즘이다. import cv2 as cv # 템플릿 과정은 8비트 단일 체널! # grayscale ! src = cv.imread("test.png", cv.IMREAD_GRAYSCALE) templit = cv.imread("templit.png", cv.IM..

    [Python openCV] 유로 트럭2 반자율주행

    반자율 주행 영상처리가 재밌어 openCV를 공부한 뒤 뭘 만들까 고민하다 간단한 반자율 프로그램을 만들어봤다. 구동 방식은 간단하다. 허프 변환을 통해 관심 영역의 직선을 추출하고, 직선과 특정 좌표 간의 거리를 계산해 차가 제대로 가는지를 판단하는 방식이다. 핸들 조향은 키보드 모듈을 이용했다. 허프 변환 허프 변환(Hough Line Transform)은 이미지에서 직선을 찾기 위해 사용되는 알고리즘이다. 원리는 다음과 같다. 우선, 선형방정식을 직각 좌표계에서 극좌표계로 변환해준다. 변환한 식 r = xcosθ+ysinθ에 선형방정식의 한 점을 대입하고, θ를0~180까지 증가시키면서 r값을 구하게 되면 사인 곡선이 나온다. 같은 방식으로 선형 방정식의 다른 점들을 대입하게 되면 각각 곡선들이 나..

    [파이썬 openCV] - 트랙바로 임계값 조정하기

    이진화 [Binarization] 이진화는 그레이 스케일의 이미지를 바이너리(binary) 이미지로 변환하는 방법이다. 임계값(thershold) 기준으로 그레이 스케일의 이미지를 흰, 검 영역에 표현하게 된다. openCV로 윈도위에 트랙바를 추가해서 원하는 영역의 임계값을 쉽게 추출할 수 있다. 구현 import numpy as np import cv2 as cv def on_trackbar(x): """ callback func for trackbar """ pass img_color = cv.imread('sample.png', cv.IMREAD_COLOR) # gray scale img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY) cv.imshow('G..

    [파이썬 openCV] - 픽셀, 컬러와 흑백 이미지

    픽셀 기본적으로 디지털 사진은 픽셀이라 부르는 2차원 좌표 평면에 분포된다. 이미지 너비 X 이미지 높이가 이미지에 포함된 픽셀 개수이며, 이를 이미지 크기라 부른다. (0, 0) (0, 1) (0, 2) (0, 3) (1, 0) (1, 1) (1, 2) (1, 3) (2, 0) (2, 1) (2, 2) (2, 3) (3, 0) (3, 1) (3, 2) (3, 3) (openCV 좌표) 픽셀의 데이터는 데이터의 타입이 뭐냐에 따라 다르다. 컬러인 경우 삼원색에 해당하는 b,g,r인 3개의 channel이 열린다. 흑백인 경우 1개 channel만 열린다. (0, 0, 0) (255, 0, 0) (0, 255, 0) (0, 0, 255) (0, 0, 0) (255, 0, 0) (0, 255, 0) (0, ..

    [파이썬 openCV] - 이미지 데이터 공유 & 복사

    이미지 값 복사 파이썬은 기본적으로 얕은 복사(shallow copy)이다. 얕은 복사라 함은 새로운 변수에 기존 변수를 대입하면 값이 복사가 되는 것이 아니라 메모리 주소가 복사되는 것을 말한다. 따라서 openCV로 이미지를 다룰 때 일반적인 경우에는 이미지를 공유해서 다루게 된다. import cv2 as cv img_gray = cv.imread('sample.png', cv.IMREAD_GRAYSCALE) img_copyed = img_gray print(id(img_copyed), id(img_gray)) # 아직은 똑같은 넘파이 배열 # img_gray 에 선을 그으면 img_copyed에도 동일하게 적용 cv.line(img_gray, (0, 0), (100, 100), 0, 10) cv...