본문 바로가기
728x90

OpenCV41

CT image와 RGB image CT 이미지(Computed Tomography image)는 X-선 방사선을 사용하여 촬영한 검은색과 흰색으로 이루어진 2D 또는 3D 영상입니다. CT 이미지는 뼈, 내장, 혈관 등을 자세하게 보여주며, 의학 분야에서 종종 사용됩니다. CT 이미지는 grayscale(회색조)로 구성되어 있으며, 각 화소(pixel)는 밝기 값을 나타냅니다. 반면에, RGB 이미지(Red Green Blue image)는 색상을 포함한 2D 또는 3D 이미지입니다. RGB 이미지는 빨강, 초록, 파랑(RGB)의 3가지 기본색상을 조합하여 모든 색상을 나타내며, 일반적으로 사진 및 비디오에서 사용됩니다. RGB 이미지의 각 화소는 빨강, 초록, 파랑의 색상값을 나타내며, 0부터 255까지의 값을 가집니다. Hounsfi.. 2023. 4. 25.
이미지 종횡비가 일치하지 않을때(Aspect Ratio, Resize) 종횡비란? ChatGPT 종횡비는 영상이나 그래픽 등의 비율을 나타내는 개념 중 하나로, 가로와 세로의 길이 비율을 말합니다. 종횡비는 가로의 길이를 세로의 길이로 나눈 값으로 나타내며, 일반적으로 "가로 : 세로"로 표시합니다. 예를 들어, 4:3 종횡비는 가로의 길이가 세로의 길이보다 4만큼 길고, 세로의 길이가 가로의 길이보다 3만큼 긴 비율을 말합니다. 16:9 종횡비는 가로의 길이가 세로의 길이보다 16만큼 길고, 세로의 길이가 가로의 길이보다 9만큼 긴 비율을 말합니다. 종횡비는 영상 제작, 모니터나 TV 등의 디스플레이 장비, 인터넷 사이트 디자인 등에서 매우 중요한 요소 중 하나입니다. 이는 종횡비가 맞지 않으면 영상이나 이미지가 왜곡되어 보이거나 잘리는 등의 문제가 발생하기 때문입니다. .. 2023. 4. 4.
OpenCV 한글 경로일때, 이미지 ## openCV 경로 한글일때 = image.shape확인시 def korean_path(path, img): try: origin_img = cv2.imread(f"{path}\\{img}") return origin_img.shape ## 한글 except: img_path = f"{path}\\{img}" with open(img_path, 'rb') as f: data = f.read() data_io = BytesIO(data) image = Img.open(data_io) return image.size 영상 v = cv.VideoCapture(file_path + '\\' + file_list) if not v.isOpened(): print("Could not Open", file.. 2023. 3. 14.
CH10 OpenCV-Python Optical flow 옵티컬플로우(Optical flow)란?- 광학 흐름 - 연속하는 두 프레임(영상)에서 카메라 or 객체의 움직임에 의해 나타나는 객체의 이동 정보 패턴 == Structure from Motion, Video Compression, Video Stabilization(손떨림 방지), etc 두 가지 사실을 가정 1. 연속된 프레임 사이에서 움직이는 물체의 픽셀 강도(intensity)는 변함이 없다. 2. 이웃하는 픽셀은 비슷한 움직임을 갖는다. 옵티컬플로우(Optical flow) 계산 함수 * 루카스-카나데 알고리즘(Lucas-Kanade algorithm) = 주로 Sparse(희소한) points에 대한 이동 벡터 계산 ==> 특정 픽셀에서 optical flow 벡터 계산 이웃하는 픽셀은 비슷.. 2021. 12. 25.
CH10 OpenCV-Python 추적(Mean Shift, Cam Shift) 추적(Tracking) 평균이동(Mean Shift) 알고리즘이란? - 데이터 분석 기법 중 하나 - 데이터가 밀집되있는 분포를 찾는 것 == 모드검출(mode seeking)이라고 불리기도 함 # 특정 색 추적 # 비디오 파일 열기 cap = cv2.VideoCapture('ch10\\videos\\camshift.avi') if not cap.isOpened(): print('Video open failed!') sys.exit() ret, frame = cap.read() # roi = cv2.selectROI('orange', frame) (x, y, w, h) = cv2.selectROI('orange', frame) # print(roi) x, y, w, h rc = (x, y, w, h) i.. 2021. 12. 25.
CH10 OpenCV-Python 배경차분(MOG) MOG(Mixture of Gauusian)란? - 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분 - 하나의 데이터 분석 기법 영상의 각 Pixel 값을 배경영상을 등록시켜놓고 배경영상과 같냐 다르냐를 판단 = 현재 프레임에 그 객체가 새로 나타난거냐 아니냐를 판단 - 미리 정해둔 배경 영상의 Pixel 값은 이 위치에서 Pixel 값은 100이였다 정의하는 것이 아니라 100 금방에 어떤 Gaussian을 따르고 있다고 정의 ==> Gaussian 분포를 하나만 쓰는 것이 아니라 여러개 사용해서 어떤 위치의 특정 Pixel, 배경 Pixel값이 어느 Gaussian분포를 따르고 있다라는 모델 형태를 준다. ex) 흔들리는 나무가 있다할 때 나뭇잎은 배경일수도(하늘색) 나뭇잎일 수도(초.. 2021. 12. 25.
CH10 OpenCV-Python 객체 추적(이동 평균 배경) Mean shift 정적 배경 모델 사용 시 문제점 * 미리 등록된 기준 영상이 실제 배경과 크게 달라질 경우 오동작 - 도로에 차는 잠깐 있다가 없어짐 ==> 평균을 구한 영상과 현재 Frame의 차영상을 계산하면 현재 Frame에 있는 새로운 차들만 검출가능 == 이런 수백장의 영상을 저장한다는게 시스템쪽으로 무리가 생김(= 대용량 메모리가 필요) So, 이동평균 사용 이동 평균(Moving Average) = WeightSum - 수백 장의 영상을 저장하는 대신 매 프레임이 들어올 때마다 평균 영상을 갱신 - 갱신된 배경영상 = int가 아니라 미세하게 업데이트 되야하기 때문에 float 가중치 ∝ = 0 -> 현재프레임=0, 이전 배경영상을 계속 쓰니 의미가 없다(업데이트가 안됨) ∝ = 1 -> 현재프레임을 계속 .. 2021. 12. 25.
CH10 OpenCV-Python 객체 추적(배경차분) 배경차분(Background Subtraction: BS) == 정적배경(Static Background) 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출 움직이는 전경 객체 검출을 위한 기본적인 방법 Back Image(정적배경)을 등록하고 새로 들어온 Frame과 차영상을 통해서 새로운 객체 검출 Threshold를 사용해서 이진화 => 흰색 객체를 레이블링 기법(connect..stats)을 사용해서 크기와 위치를 판단 그리고 그 위치에서 boundingRect그려주면 간단한 침입자 감지 프로그램 만들 수 있다. But 이와같은 방법은 좋지 않다 why? 영상에서 새로운 객체를 계속 따라가지만 멈추었을 때도 계속 추적 1. 조명의 변화에 민감 2. 차가 새로 들어오고 멈.. 2021. 12. 25.