Matplotlib의 컬러맵을 화면에 출력하는 OpenCV 예제입니다. 2024. 4. 18 최초작성 실행 결과입니다. Matploilib의 'plasma' 컬러맵을 보여줍니다. 사용한 전체 코드입니다. import numpy as np import cv2 import matplotlib cmap = matplotlib.colormaps['plasma'] array = np.linspace(0, 1, 256) # array 값 0 ~ 255에 대응하는 컬러를 가져옵니다. plasma_colors = cmap(array) # shape=(256, 4) plasma_colors = plasma_colors[:, :3] # 알파 채널 제거 shape=(256, 3) # 이미지의 색상 순서를 RGB에서 BGR로..
k-means 클러스터링 알고리즘을 구현한 kmeans 함수 예제입니다. 2024. 4. 10 최초시간 kmeans 함수는 k-means 클러스터링 알고리즘을 구현한 것으로, 주어진 데이터를 k개의 클러스터로 그룹화하는 데 사용됩니다. 이 함수는 데이터 포인트 사이의 유클리드 거리를 기반으로 각 데이터 포인트를 가장 가까운 클러스터 중심에 할당합니다. 클러스터의 수 k는 사용자가 지정해야 하며, 알고리즘은 클러스터의 중심을 반복적으로 업데이트하면서 데이터 포인트를 그룹화합니다. import cv2 import numpy as np def cluster_colors(img, k): h, w, _ = img.shape # 이미지를 (픽셀 수, 채널 수) 형태로 변환합니다. img_flatten = img.r..
inpaint 함수는 이미지에서 손상된 부분을 제거하고 그 자리를 자연스럽게 채워 넣어줍니다. 2024. 4. 4 최초작성 왼쪽 이미지가 원본 깊이 이미지입니다. 검은색으로 된 부분이 손상된 부분입니다. 오른쪽은 inpaint 함수를 사용하여 손상된 검은색 부분을 주변 픽셀로 메꾸어 자연스럽게 바꾼 결과입니다. 전체 코드입니다. import cv2 # 이미지를 로드합니다. img_color = cv2.imread('fall-01-cam0-d-001.png') # 그레이 스케일 이미지로 변환합니다. img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY) # 검은색 영역을 마스크로 사용하기 위해 임계값을 설정합니다. # cv2.THRESH_BINARY_INV를 사용..
동영상의 배경을 제거하고 움직이는 물체를 검출하는 데 사용할 수 있는 Background Subtraction 예제 입니다. OpenCV에서 제공하는 Background Subtraction 알고리즘 중 하나인 createBackgroundSubtractorKNN를 사용하여 테스트를 진행해봤습니다. 2018. 9. 22 최초작성 2023. 12. 10 최종작성 - 박스를 하나로 묶어주는 코드 추가 OpenCV Python - Background Subtraction 테스트 영상 https://youtu.be/_nUCgbOCUPw import cv2 import numpy as np import os, time def get_points(box): x, y, w, h = box return [(x, y),..
OpenCV 빌드하여 설치 후 Python에서 cv 모듈을 로드시 다음 에러가 발생한 경우 해결한 방법입니다. ModuleNotFoundError: No module named 'cv2' 상황에 따라선 다른 방법이 필요할 수도 있습니다. 2022. 11. 25 최초작성 2022. 11. 26 우선 cv2 모듈 파일 위치를 찾았습니다. find /usr | grep cv2 명령으로 검색하여 다음처럼 찾았습니다. /usr/local/lib/python3.8/site-packages/cv2.cpython-38-x86_64-linux-gnu.so 다음처럼 복사해주고 나서 해결되었습니다. 파이썬마다 라이브러리 모듈을 찾을데 검색되는 디폴트로 사용하는 dist-packages 디렉토리 위치가 다른데 엉뚱한 곳에 복..
동영상 파일의 전체 프레임수를 알아내는 방법입니다. 2023. 6. 27 최초작성 import cv2 cap = cv2.VideoCapture('test.mp4') # 동영상의 전체 프레임 수입니다. frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)
IOU(Intersection over union) Python 예제 코드입니다. 2023. 6. 13 최초작성 코드에서 사용할 경계상자 정보입니다. box1 = (0, 0, 100, 100) # x,y,w,h box2 = (0, 0, 50, 50) # x,y,w,h box3 = (150, 150, 50, 50) # x,y,w,h box1과 box2의 관계부터 살펴봅니다. IOU는 두 경계 집합의 교집합 면적과 두 경계 집합의 합집합 면적의 비율을 구합니다. box1과 box2의 IOU를 구합니다. box1과 box2의 교집합 면적은 box2의 면적이고 box1과 box2의 합집합의 면적은 box1의 면적입니다. 즉, 50*50 / 100*100 = 2500 / 10000 = 0.25 입니다. box1에..
OpenCV 의 원을 그리는 circle 함수를 C++과 Python에서 사용하는 방법을 설명합니다. 2015. 1. 2 - 최초 작성 2018. 7. 16 2019. 7. 17 2019. 8. 11 - C++ 코드 추가 2023. 4. 17 circle 함수는 다음과 같은 파라미터를 가집니다. cv.circle( img, 원이 그려질 이미지 center, 원의 중심 좌표 ( x, y ) radius, 원의 반지름 color, 원의 선 색 또는 원을 채울 색( B, G, R ) thickness, 선굵기(디폴트값 1) lineType, 디폴트값 cv.LINE_8(=8-connected line) shift ) 디폴트값 0 반지름 100, 선굵기 1인 빨간색 원 안에 파란색으로 채워진 반지름 10인 원을 ..
OpenCV에서 사용하는 Top Left를 원점으로 하는 좌표와 Bottom Left를 원점으로 하는 좌표 사이에 변환을 하는 예제 입니다. 2023. 4. 29 최초작성 원점을 Bottom Left로 바꾼 후, 모서리 4군데의 좌표를 출력했습니다. 전체 코드입니다. convert_coordinate 함수를 사용하여 원점이 TOP LEFT인 좌표계와 원점이 BOTTOM LEFT인 좌표계를 서로 변환할 수 있습니다. 아래 코드에서는 원점이 BOTTOM RIGHT인 좌표를 원점이 TOP LEFT인 좌표로 변환하여 화면에 원과 좌표를 출력합니다. import cv2 import numpy as np # TOP LEFT BOTTOM LEFT def convert_coordinate(x,y): x = x y = ..
Homography matrix를 이용한 planar rectification를 C++로 구현한 다음 포스트의 내용을 파이썬 버전으로 만들어봤습니다. 이론적인 배경은 해당 포스트를 읽어보세요. Homography matrix를 이용한 planar rectification를 구현 예제 https://webnautes.tistory.com/2121 2023. 7. 1 최초작성 테스트 결과와 코드는 영상에서 확인하세요. https://youtu.be/8lVeReZmNK0 테스트에 사용한 이미지입니다.