본문 바로가기

Computer Vision27

[OpenCV] 블러링과 샤프닝 블러링 블러링은 영상에서 화소값이 급격하게 변하는 부분들을 감소시켜 점진적으로 변하게 함으로써 영상에서 전체적으로 부드러운 느낌이 나게 하는 기술이다. 교재에 따라서 스무딩(smoothing)이라 하기도 한다 import numpy as np, cv2 # 회선 수행 함수 - 행렬 처리 방식(속도 면에서 유리) def filter(image, mask): rows, cols = image.shape[:2] dst = np.zeros((rows, cols), np.float32) # 회선 결과 저장 행렬 xcenter, ycenter = mask.shape[1]//2, mask.shape[0]//2 # 마스크 중심 좌표 for i in range(ycenter, rows - ycenter): # 입력 행렬 .. 2022. 11. 24.
[OpenCV] 03. 화소처리 (컬러 공간 변환) 컬러 공간 변환 (BGR -> CMY) import numpy as np, cv2 BGR_img = cv2.imread("img/color_model.jpg", cv2.IMREAD_COLOR) # 컬러 영상 읽기 if BGR_img is None: raise Exception("영상 파일 읽기 오류") white = np.array([255, 255, 255], np.uint8) CMY_img = white - BGR_img Cyan, Magenta, Yellow = cv2.split(CMY_img) # 채널 분리 titles = ['BGR_img','CMY_img','Cyan','Magenta','Yellow'] [cv2.imshow(t, eval(t)) for t in titles] cv2.waitK.. 2022. 11. 23.
[OpenCV] 02. 화소처리 (히스토그램) 영상 히스토그램 계산 - 1 import numpy as np, cv2 def calc_histo(image, channels, hsize, ranges ): ch = len(channels) shape = hsize if ch >1 else (hsize[0], 1) hist = np.zeros(shape, np.float32) # 히스토그램 누적 행렬 gap = np.divide(ranges[1::2], hsize) # 계급 간격 for row in image: # 2차원 행렬 순회 방식 for val in row: idx = np.divide(val[channels], gap).astype('uint') hist[tuple(idx)]+= 1 return hist image = cv2.imread("i.. 2022. 11. 23.
[OpenCV] 01. 화소 처리 행렬 원소 접근 방법 import numpy as np def mat_access1(mat): for i in range(mat.shape[0]): for j in range(mat.shape[1]): k = mat[i, j] # 원소 접근 - mat1[i][j] 방식도 가능 mat[i, j] = k * 2 # 원소 할당 def mat_access2(mat): for i in range(mat.shape[0]): for j in range(mat.shape[1]): k = mat.item(i, j) # 원소 접근 mat.itemset((i, j), k * 2) # 원소 할당 mat1 = np.arange(10).reshape(2, 5) mat2 = np.arange(10).reshape(2, 5) pri.. 2022. 11. 22.
[OpenCV] 산출 연산 함수 산출 연산 함수 cv2.add(src1, src2[, dst[, mask[, dtype]]]) : 두 개의 배열 혹은 배열과 스칼라의 각 원소 간 합을 계산 src1 : 첫 번째 입력 배열 혹은 스칼라 src2 : 두 번째 입력 배열 혹은 스칼라 dst : 계산된 결과의 출력 배열 mask : 연산 마스크 : 0이 아닌 마스크 원소의 위치만 연산 수행(8비트 단일 채널) dtype : 출력 배열의 깊이 cv2.subtract(src1, src2[, dst[, mask[, dtype]]]) : 두 개의 배열 혹은 배열과 스칼라의 각 원소 간 차분을 계산한다. add() 함수와 인수 동일 cv2.multiply(src1, src2[, dst[, scale[, dtype]]]) : 두 배열의 각 원소 간 곱을.. 2022. 11. 21.
[OpenCV] 기본 배열 연산 (Operations On Arrays) 기본 배열 (Array) 처리 함수 cv2.filp(src, flipCode[, dst]) : 입력된 2차원 배열을 수직, 수평, 양축으로 뒤집는다 src, dst : 입력 배열, 출력 배열 filp code 0 : x축을 기준으로 위아래로 뒤집는다 1 : y축을 기준으로 좌우로 뒤집는다 -1 : 양축 (x축, y축)을 기준으로 뒤집느다 cv2.repeat(src, ny, nx[, dst]) : 입력 배열의 반복된 복사본으로 배열을 채운다 src, dst : 입력 배열, 출력 배열 ny, nx : 수직 방향, 수평 방향 반복 횟수 cv2.transpose(src[, dst]) : 입력 행렬의 전치 행렬을 출력으로 반환 src, dst : 입력 배열, 출력 배열 import cv2 image = cv2.i.. 2022. 11. 19.
[CV] One-Stage와 Two-Stage 차이 One-Stage와 Two-Stage는 객체 감지(object detection) 모델의 접근 방식에 대한 용어로 사용됩니다. One-Stage Detectors One-Stage Detectors는 한 번의 단계로 객체의 경계 상자(bounding box)와 클래스 레이블(class label)을 직접적으로 예측하는 모델입니다.이러한 모델은 일반적으로 입력 이미지 전체에 대해 여러 위치와 스케일에서 밀집 그리드(grid) 또는 제안(proposal)를 사용합니다. 앵커(anchor) 또는 제안에 대해 동시에 분류(classification)와 회귀(regression) 작업을 수행하여 최종 감지 결과를 예측합니다. 대표적인 One-Stage Detectors로는 YOLO (You Only Look On.. 2022. 11. 16.
[OpenCV] VideoCapture VideoCapture 클래스 함수 설명 생성자 3가지 VideoCapture 객체 선언 방법을 지원 cv2.VideoCapture() cv2.VideoCapture(filename) cv2.VideoCapture(device) 동영상 캡쳐를 위한 동영상 파일 혹은 캡처 장치를 개방 cv2.VideoCapture.open(filename) cv2.VideoCapture.open(device) 캡처 장치의 연결 여부 확인 cv2.VideoCapture.isOpened() 동영상 파일이나 캡처 장치를 해제 (클래스 소멸자에 의해서 자동으로 호출되므로 명시적으로 수행하지 않아도 된다) cv2.VideoCapture.release() get, set cv2.VideoCapture.get(propld) propl.. 2022. 11. 15.
[OpenCV] I/O 처리 영상파일 처리 cv2.imread(filename[, flags]) : 지정한 영상파일로부터 영상을 적재한 후, 행렬로 반환 filename : 적재할 영상 파일 이름 flags : 적재한 영상을 행렬로 반환될 대 컬러 타입을 결정 cv2.imwrite(filename, img[, params]) : image 행렬을 지정한 영상 파일로 저장 filename : 적재할 영상 파일 이름 img : 지정하고자 하는 행렬 영상 params : 압축 방식에 사용되는 인수 상 (paramid, paramValue) 행렬 컬러 타입 결정 상수 cv2.IMREAD_UNCHANGE (값 : -1) - 입력 파일에 저장된 타입의 영상을 그래로 반환 (알파 채널 포함) cv2.IMREAD_GRAYSCALE (값 : 0) .. 2022. 11. 10.