
웹캠 / 비디오 파일에서 가져온 이미지에 fps 표시하여 화면에 출력하는 OpenCV Python 예제 코드입니다. 2022. 03. 06 최초작성 2023. 09. 10 웹캠/비디오 파일을 성공적으로 열었는지 여부를 체크 # 참고 # https://github.com/dgseten/bad-cv-tfm/blob/2ada9b71f85aa5eb75c1f4a039cb14d697ee2f69/tools/video/video-player-wait-fps.py # https://stackoverflow.com/a/65146731 import cv2 import time # 이미지에 텍스트를 출력하는 함수 def draw_text(img, text, x, y): font = cv2.FONT_HERSHEY_SIMPLEX..

applyColorMap를 사용하여 OpenCV Python에서 HeatMap을 흉내내는 예제코드입니다. 2023. 9. 10 최초작성 배열에 가상으로 값을 넣어서 출력해본 결과입니다. 배열에 있는 값이 높을 수록 검은색 < 빨간색 < 노란색으로 보입니다. 전체 코드입니다. import cv2 import numpy as np # 가상으로 점유 정보가 저장된 2차원 배열을 생성합니다. # OpenCV의 컬러맵 함수는 8비트 이미지를 사용하므로 0-255 범위로 설정합니다. 필요시 값의 범위를 조정해야합니다. occupancy_counts = np.array([[0,0,0,0,0,0,0,0,0,0], [0,10,10,10,10,10,10,10,10,0], [0,0,0,0,0,0,0,0,110,0], [0,..
RTSP 재접속 및 비디오 다시 재생하는 코드를 OpenCV로 간단히 구현해봤습니다. 2022. 10. 27 최초작성 import cv2 import time try_num = 1 program_quit = False # 두개의 루프를 사용합니다. # 바깥 루프는 RTSP 재접속 시도 및 비디오 다시 재생하는 루프이고 # 안쪽 루프는 이미지를 가져와 화면에 보여주는 루프입니다. while True: # 시도한 횟수를 출력합니다. print(f'try {try_num}') # 0 대신에 RTSP URL 이나 비디오 파일 이름으로 대체하면 됩니다. cap = cv2.VideoCapture(0) # 이미지를 가져옵니다. ret,img_color = cap.read() if ret == False: try_nu..

이번 포스팅에서는 OpenCV Python의 좌표계와 그리기 함수를 사용하기 전에 알아야 하는 개념에 대해서 설명합니다. 2015. 1. 2 - 최초 작성 2023. 4. 13 - 최종작성 관련 포스트 OpenCV 좌표계를 직교 좌표계로 변환하는 Python 코드 https://webnautes.tistory.com/1812 OpenCV 좌표계 변환( Top Left ↔ Bottom Left ) https://webnautes.tistory.com/1815 OpenCV Python에서는 좌표를 튜플로 나타냅니다. 튜플의 첫번째 원소가 x 좌표, 두번째 원소가 y좌표입니다. ( x , y ) 이미지의 왼쪽 위가 원점 (0,0)입니다. 오른쪽으로 갈수록 x값이 증가하고 아래쪽으로 갈수록 y 값이 증가합니다...

OpenCV에서 사용하는 좌표계를 직교 좌표계로 변환하는 예제입니다. 2023. 4. 13 최초작성 OpenCV의 좌표계는 아래 그림처럼 왼쪽 위가 (0, 0)이고 오른쪽으로 갈수록 x좌표가 증가하며 아래로 내려갈수록 y좌표가 증가합니다. 자세한 내용은 다음 포스트를 참고하세요. OpenCV Python 그리기 예제 1. OpenCV의 좌표계 https://webnautes.tistory.com/580 수학에서 접한 좌표계는 직교 좌표계로 보통 왼쪽 아래에 (0,0)이 주어지며 오른쪽으로 갈수록 x좌표가 증가하고, 위로 올라갈수록 y좌표가 증가합니다. OpenCV의 좌표계를 직교 좌표계로 변환하는 코드를 간단히 작성해봤습니다. 화면 중앙에 (0,0)이 위치하며 오른쪽으로 갈 수록 x좌표가 증가하고 위로 ..

로드한 이미지를 정사각형 이미지가 되도록 가장자리를 0으로 채워 패딩(padding)하는 OpenCV Python 예제입니다. 최소한 이미지의 최대변 길이 이상을 입력해야 정사각형 이미지로 만들어줍니다. 그 이하인 경우에는 원본 이미지를 그대로 출력합니다. 2022. 3. 6 최초작성 2022. 5. 28 이미지가 큰 경우에도 패딩하도록 수정 640 x 480 이미지를 로드하여 한변의 길이가 640인 정사각형 이미지를 출력하고 있습니다. import cv2 def padding(img, set_size): try: h,w,c = img.shape except: print('파일을 확인후 다시 시작하세요.') raise if h < w: new_width = set_size new_height = int(..

로드한 이미지를 Center Crop하는 OpenCV Python 예제입니다. 2022. 3. 6 최초작성 오른쪽 원본 이미지의 중심을 기준으로 300 x 300 이미지를 Center Crop한 이미지가 왼쪽 이미지입니다. 원본 이미지에 Center Crop한 이미지를 맞추어 보면 어느 부분인지 알 수 있습니다. import cv2 def center_crop(img, set_size): h, w, c = img.shape if set_size > min(h, w): return img crop_width = set_size crop_height = set_size mid_x, mid_y = w//2, h//2 offset_x, offset_y = crop_width//2, crop_height//2 c..
Python OpenCV에서 이미지 크기(width, height)를 가져오는 방법입니다. 2021. 11. 14 컬러 이미지의 경우에는 shape 함수를 통해 height, width, channels를 얻을 수 있습니다. import numpy as np import cv2 img = cv2.imread('apple.png', cv2.IMREAD_COLOR) print('img.shape ', img.shape) h, w, c = img.shape print('height ', h) print('width ', w) print('channel ', c) img.shape (618, 641, 3) height 618 width 641 channel 3 흑백 이미지의 경우에는 shape 함수를 통해 he..

사각형을 찾도록 MSER(Maximally Stable Extremal Regions)을 이미지에 적용한 다음 IoU(Intersection over Unit)를 사용하여 같은 영역에 중복되어 그려진 사각형을 제거해보았습니다. 테스트한 이미지에서만 사용해본 코드라 다른 이미지에서는 의도한대로 동작하지 않기 때문에 추가 작업이 필요합니다. 포스트에선 IOU값이 0.2보다 크면 사각형 내부에 사각형이 포함된 것으로 보았는데 두 사각형이 포함관계가 아니라 일부 겹쳐진 경우도 해당 될 수 있기 때문입니다. 포스트에서는 문제를 간단하게 하기 위해서 다음 이미지에서 검출되는 5개의 사각형 중, 사각형 내에 있는 작은 사각형을 제외하고 나머지 사각형을 검출하도록 했습니다. 2021. 9. 23 - 최초작성 2021...

해리스 코너 디텍터를 사용하여 검출한 코너점을 사용하여 두 장의 이미지를 매칭하는 예제입니다. 코너점의 방향을 기준으로 이미지 패치를 회전시키서 매칭점인지 비교하기 때문에 다른 부분의 코너점인데 매칭될 수 있습니다. 2019. 5. 29 최초작성 2020. 9. 14 최근 OpenCV 버전에서 문제 되는 코드 수정 2021. 8. 1 최근 OpenCV 버전에서 문제 되는 코드 수정 두 장의 이미지에서 각각 코너점을 찾은 후, 유사한 코너점끼리 매칭을 해준 결과입니다. 다음 단계를 거쳐 코너점을 매칭합니다. 1. 해리스 코너 디텍터로 코너점을 찾습니다. 2. 코너점을 기준으로 일정 크기의 이미지를 ROI 합니다. 3. 코너점을 중심점으로 하는 일정크기의 패치를 얻었습니다. 일치하는 점인것 확실 하지만 이미..