큐에서 값을 꺼내오는 것에 대한 fps를 계산하는 간단한 Python 예제입니다. 2024. 4. 18 최초작성 실행결과입니다. 20개의 값을 큐에서 꺼내오며 fps를 측정한 결과를 보여줍니다. 큐에서 꺼낸 값 1, 경과시간 0.00 초, 지금까지 큐에서 꺼낸 개수 1개, FPS: 322638.77 큐에서 꺼낸 값 2, 경과시간 1.01 초, 지금까지 큐에서 꺼낸 개수 2개, FPS: 1.98 큐에서 꺼낸 값 3, 경과시간 2.02 초, 지금까지 큐에서 꺼낸 개수 3개, FPS: 1.49 큐에서 꺼낸 값 4, 경과시간 3.03 초, 지금까지 큐에서 꺼낸 개수 4개, FPS: 1.32 큐에서 꺼낸 값 5, 경과시간 4.04 초, 지금까지 큐에서 꺼낸 개수 5개, FPS: 1.24 큐에서 꺼낸 값 6, 경과..
검은색 빈공간을 채우는 OpenCV Python 예제입니다. 2024. 4. 17 최초 작성 실행 결과입니다. 왼쪽 원본 이미지에 보이는 검은색 공백들이 메꿔진 결과가 오른쪽 결과 이미지에 보입니다. 전체 코드입니다. import cv2 def fill_internal_areas(image_array): # 그레이스케일로 변환합니다. gray = cv2.cvtColor(image_array, cv2.COLOR_BGR2GRAY) # 컨투어를 찾습니다. contours, hierarchy = cv2.findContours(gray, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) if contours and hierarchy is not None: for idx, contour in..
Python의 리스트와 문자열간 변환을 나타냅니다. 2024. 4. 10 최초작성 import ast # 정수 리스트 list_original = [1, 2, 3, 4, 5] print(f'정수 리스트 : 타입={type(list_original)} 리스트={list_original}') # 리스트를 문자열로 변환 list_str = str(list_original) print(f'문자열로 변환된 리스트 : 타입={type(list_str)} 문자열={list_str}') # 문자열을 리스트로 변환 list_convert = ast.literal_eval(list_str) print(f'문자열을 리스트로 변환 : 타입={type(list_convert)} 리스트={list_convert}') 실행 결과입..
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를 사용..
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" 에러 해결 방법입니다. 2024. 3. 27 최초작성 2024. 3. 28 주의사항 추가 pyQt5만 사용할때에는 문제 없다가 opencv와 같이 사용시 다음과 같은 오류가 발생했습니다. QObject::moveToThread: Current thread (0x2a71090) is not the object's thread (0x2ddb230). Cannot move to target thread (0x2a71090) qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/webnautes/miniconda3/envs/pyqt5/li..
Apple Silicon Macbook에서 Visual Studio Code와 연동하여 OpenCV C++ / Python 개발 환경을 만드는 과정을 설명합니다. 2021. 12. 04 최초작성 2022. 11. 13 최종수정 Python용 OpenCV만 필요한 경우 다음처럼 Python용 OpenCV 패키지를 설치하여 사용할 수 있습니다. pip install opencv-contrib-python 포스트는 C++용과 Python용을 동시에 설치하는 경우이고 환경 변화에 따라 설치 방법이 변경될 수 있습니다. 1. 다음 포스트에 나온대로 Xcode를 설치합니다. Apple Silicon Macbook에 Xcode 설치하기 https://webnautes.tistory.com/2024 2. Command..
값 범위에 따라 컬럼 값을 변경하는 pandas 예제입니다. 2024. 3. 21 최초작성 label 컬럼에 있는 1에서 11 범위의 값을 주어진 조건에 따라 0과 1로 변경합니다. 컬럼의 값이 1~5이면 1로, 6~11이면 0으로 변경합니다. import pandas as pd # 1에서 11 범위를 갖는 값을 가진 label 컬럼이 포함된 데이터프레임을 생성합니다. df = pd.DataFrame({ 'label': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] }) # 컬럼에 포함된 값의 통계를 출력합니다. value_counts = df['label'].value_counts() print(value_counts) print('\n') # 'label' 컬럼의 값이 1~5이면 1..
Python에서 Thread/Process를 강제로 종료시키는 방법을 다루고 있습니다. 일반적으로 스레드나 프로세스를 갑자기 종료하는 것은 좋은 방법이 아닙니다. 왜냐하면 스레드/프로세스가 자원을 사용하던 중에 갑자기 종료되면 자원 해제 처리가 제대로 이루어질 수 없기 때문입니다. 스레드/프로세스를 강제 종료해도 자원 해제나 기타 다른 문제가 생길 가능성이 없다면 사용해볼 여지가 있습니다. 본 포스트는 참고한 글을 기반으로 작성되었지만 대부분의 코드와 글이 원문과 차이가 있습니다. 원문에 있던 예외와 trace 관련 방법은 제외했습니다. 중지 플래그 - 전역변수 중지 플래그 - 이벤트 객체 Using traces to kill threads : 스레드 대신 프로세스 사용 데몬(daemon) 참고 2024..
설치시 다운로드한 Python 패키지가 저장되어 있는 캐시(cache)를 삭제하는 방법을 다룹니다. 2024. 3. 16 최초작성 pip cache에는 pip 명령으로 설치시 다운로드된 Python 패키지나 소스코드로부터 필드된 Python 패키지가 저장되어 있습니다. 때때로 버전 충돌등으로 인해 또는 디스크 공간 절약을 위해 pip cache에 있는 Python 패키지를 삭제해야 할 필요가 생길 수 있습니다. PyTorch나 Tensorflow 등의 패키지를 설치한 경우 pip cache가 많은 디스크 공간을 사용합니다. 다음 명령으로 pip cache 정보를 확인할 수 있습니다. 캐시가 사용하는 경로와 현재 사용한 디스크 크기, 파일 개수 등이 표시됩니다. (base) webnautes@webnaut..