본문 바로가기
728x90
반응형
SMALL
[파이썬, Python] 컴퓨터 비전(Computer Vision)의 데이터셋 1. 데이터셋(Dataset) 기계 학습 모델을 학습하는데 사용되는 데이터의 모음 데이터셋은 이미지, 오디오, 텍스트, 수치 데이터 등 다양한 데이터형으로 구성 특정 데이터 유형과 데이터셋 크기는 해결되는 문제와 사용 중인 모델 유형에 따라 달라짐 1-1. 데이터셋의 크기 모델이 학습 중에 본 예제의 수 작은 데이터셋: 다양한 예제가 포함되지 않아 과적합 발생 가능성이 높음 대규모 데이터셋: 모델이 충분한 수의 예제를 보고 일반화할 수 있음 1-2. 데이터의 품질 주석(어노테이션)이 잘못 지정되거나 레이블이 지정된 데이터셋은 모델 성능에 부정적인 영향을 줄 수 있음 다양한 개체 변형의 존재, 조명 조건, 배경 등을 포함한 데이터셋의 다양성도 모델의 견고성을 보장하는데 중요 데이터셋은 모든 컴퓨터 비전 프.. 2023. 9. 4.
[파이썬, Python] OpenCV - 레이블링(labeling)과 외곽선 검출 1. 레이블링(labeling) 이진화, 모폴로지를 수행하면 객체와 배경 영역을 구분할 수 있게됨 객체 단위 분석을 통해 각 객체를 분할하여 특징을 분석하고 객체의 위치, 크기 정보, 모양 분석, ROI 추출 등이 가능함 서로 연결되어 있는 객체 픽셀에 고유번호를 할당하여 영역 기반 모양 분석, 레이블맵, 바운딩 박스, 픽셀 개수, 무게중심, 좌표 등을 반환할 수 있게 함 cv2.connectedComponents(영상, 레이블 맵) 레이블 맵: 픽셀 연결 관계(4방향 연결, 8방향 연결..) return: 객체 개수, 레이블 맵 행렬 cv2.connectedComponentsWithStats(영상, 레이블맵) return: 객체 개수, 레이블 맵 행렬, (객체 위치, 가로세로길이, 면적 등 행렬, 무게.. 2023. 9. 2.
[파이썬, Python] OpenCV - 모폴로지 처리, 모폴로지 연산 1. 모폴로지 처리영상의 밝은 영역이나 어두운 영역을 축소, 확대하는 기법모폴로지 구조 요소를 생성cv2.getStructuringElmement(구조 요소의 모양, 사이즈) 구조 요소의 모양cv2.MORPH_RECT: 사각형cv2.MORPH_ELLIPSE: 타원형cv2.MORPH_CROSS: 십자형 1-1. 침식(erosion) 연산이미지를 깎아내는 연산객체 크기는 감소하고 배경은 확대작은 크기의 객체(노이즈)제거 효과가 있음 cv2.erode(영상, 구조요소, 출력영상, 고정점 위치) 1-2.  팽창(dilation) 연산물체의 주변을 확대하는 연산객체가 커지는 연산팽창 연산은 객체 외곽을 확대시키는 연산객체 크기는 증가되고 배경은 감소되는 효과cv2.dilate(영상, 구조요소, 출력영상, 고정점 .. 2023. 9. 2.
[파이썬, Python] OpenCV - 동영상 필터 입히기 💡 문제. 웹캠(또는 동영상)에서 스페이스바를 누를 때마다 '일반영상', '가우시안 필터영상', '케니 필터영상'으로 변환되는 프로그램을 작성해보자. 📄 사용한 동영상 파일 import cv2 import numpy as np cap = cv2.VideoCapture('cat.mp4') def blur_filter(img): img = cv2.GaussianBlur(img, (3, 3), 0) return img def canny_filter(img): med_val = np.median(img) lower = int(max(0, 0.7 * med_val)) upper = int(min(255, 1.3 * med_val)) img = cv2.GaussianBlur(img, (3, 3), 0) img = .. 2023. 9. 2.
[파이썬, Python] OpenCV - 영상의 필터링, 블러링, 엣지(Edge)검출 1. 필터링(filtering) 커널(filter)이라고 하는 행렬을 정의하고, 이 커널을 이밎 위에서 이동시켜 가면서 커널과 겹쳐진 이미지 영역과 연산을 한 후, 그 결과값을 연산을 진행한 이미지 픽셀을 대신하여 새로운 이미지를 만드는 연산 cv2.filter2D(영상, 이미지 깊이, 커널, 중심점 좌표, 추가될 값, 가장자리 화소 처리) 이미지 깊이: -1(입력과 동일) 커널행렬: 3*3, 5*5, ... 가로 세로가 동일한 행렬 사용 중심점 좌표: 기본값은 왼쪽 상단 추가될 값: 행렬연산 후 더해지는 값 가장자리 화소 처리 BORDER_CONSTANT: 000abcdefg000, 가장 자리를 0으로 채움(검정색) BORDER_REPLICATE: aaaabcedfgggg, 가장 자리를 가장 끝 픽셀로.. 2023. 9. 1.
[파이썬, Python] OpenCV - 원하는 ROI 설정 후 투시변환하기 💡 문제. namecard.jpg에 retangle과 circle을 그리고 마우스이벤트를 줘서 칸에 맞추면 투시변환을 해보자. import cv2 import numpy as np import sys def drawROI(img, corners): cpy = img.copy() c1 = (192, 192, 255) c2 = (128, 128, 255) for pt in corners: cv2.circle(cpy, tuple(pt.astype(int)), 25, c1, -1, cv2.LINE_AA) cv2.line(cpy, tuple(corners[0].astype(int)), tuple(corners[1].astype(int)), c2, 2, cv2.LINE_AA) cv2.line(cpy, tuple(c.. 2023. 8. 30.
[파이썬, Python] OpenCV - 영상의 변환 1. 영상의 변환 영상을 구성하는 픽셀의 배치 구조를 변경함으로 전체 영상의 모양을 바꾸는 작업 1-1. 이미지 이동(translate) 원래 있던 좌표에 이동시키려는 거리만큼 덧셈 x_new = x_old + d1 y_new = y_old + d2 이미지 변환 행렬(2*3 행렬) cv2.warpaffine(영상, 2*3 변환행렬, 결과이미지=None, 보간법알고리즘) [ 1 0 d1 0 1 d2 ] 결과: (0, 0) 이면 입력 영상과 크기가 같은 행렬을 반환 보간법알고리즘(가장자리를 어떻게 처리할 것인지) cv2.INTER_LINEAR: 기본값. 인접한 4개 픽셀 값에 거리 가중치 사용 속도가 빠르지만, 퀄리티가 떨어짐 cv2.INTER_NEAREST: 가장 가까운 픽셀 값을 사용 속도가 가장 빠르고.. 2023. 8. 29.
[파이썬, Python] OpenCV - 이미지 유사도 판단 1. 이미지 유사도 픽셀값의 분포가 서로 비슷하다면 유사한 이미지일 확률이 높음 cv2.compareHist(히스토그램1, 히스토그램2, 알고리즘) 알고리즘 cv2.HISTCMP_CORREL: 상관관계(1:완전 일치. -1:완전 불일치, 0: 무관계) cv2.HISTCMP_CHISQR: 카이제곱(0:완전 일치, 무한대: 완전 불일치) cv2.HISTCMP_INTERSECT: 교차(1:완전 일치, 0:완전 불일치) cv2.HISTCMP_BHATTACHARYYA: 밀도함수(0: 완전 일치, 1: 완전 불일치) ✅ img1과 유사도 판단 import cv2 import matplotlib.pyplot as plt import numpy as np img1 = cv2.imread('taekwonv1.jpg') .. 2023. 8. 27.
[파이썬, Python] OpenCV - 영상의 이진화 1. 영상의 이진화(Binarization) 픽셀을 검은색 또는 흰색과 같이 두 개의 값으로 나누는 작업 영상에서 의미있는 관심영역(ROI)과 비관심 영역으로 구분할 때 사용 배경과 객체를 나눌 때 영상의 이진화 연산을 할 때 나누는 특정값을 임계값이라고 함 cv2.threshold(영상, 임계값, 최대값, 플래그값) 플래그값 cv2.THRESH_BINARY: 픽셀값이 임계값을 넘으면 최대값으로 지정하고, 작거나 같으면 0으로 지정 예) 105로 임계값을 설정했을 때 105보다 큰 것은 최대값 으로 지정, 105보다 작으면 0 cv2.THRESH_BINARY_INV: cv2.THRESH_BINARY의 반대 cv2.THRESH_TRUNC: 픽셀 값이 임계값을 넘으면 value로 지정하고, 넘지 못하면 원래.. 2023. 8. 27.
[파이썬, Python] OpenCV - 관심영역(ROI) 1. 관심 영역(ROI, Region of Interest) 영상 내에서 관심이 있는 영역 cv2.selectROI(창이름, 영상, 중앙에서 시작할지에 대한 여부=False) 중앙에서 시작할지에 대한 여부가 True일 경우 선택한 ROI 중앙좌표로 계산 기본값은 False이고 왼쪽상단으로 좌표 계산 ✅ 다음 그림에서 해 부분을 ROI로 설정하여 합성하고 사각형 그리기(해가 떠있는 부분의 좌표값으로) import cv2 img = cv2.imread('sun.jpg') x = 180 y = 17 w = 125 h = 120 roi = img[y: y+h, x: x+w] img2 = roi.copy() # print(roi.shape) img[y:y+h, w+x:x+w+w] = roi cv2.rectangl.. 2023. 8. 25.
[파이썬, Python] OpenCV - 크로마키(cromakey) 1. inRange() 이미지에서 지정된 범위 안에 픽셀을 찾아냄 cv2.inRange(영상, min값, max값) ✅ inRange()를 활용하여 영상에서 녹색계열만 추출하기 import cv2 src = cv2.imread('candies.png') hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) ''' RGB 녹색계열 0 2023. 8. 25.
[파이썬, Python] OpenCV - 히스토그램과 영상 균등화, 정규화 1. 히스토그램(histogram) 영상의 픽셀값 분포를 그래프 형태로 표현 예) 그레이스케일 영상에서 밝기 정보에 해당하는 픽셀의 개수를 구하고 막대 그래프로 표현 cv2.calcHist(영상, 히스토그램을 구할 채널, None, 빈의 개수를 나타내는 리스트, 히스토그램 각 차원의 최소값과 최대값으로 구성된 리스트) 빈의 개수: 색상에 대한 개수(0 ~ 255) -> 관례적으로 256을 넣으면 됨 1-1. 영상과 히스토그램의 관계 밝은 영상이면 히스토그램이 전체적으로 오른쪽으로 치우쳐져 있음 어두운 영상이면 히스토그램이 전체적으로 왼쪽으로 치우쳐져 있음 명암비가 확실한 영상이면 히스토그램이 전체적으로 양쪽으로 분포 ✅ 흑백 영상의 히스토그램 import cv2 import matplotlib.pyplo.. 2023. 8. 25.
728x90
반응형
LIST