본문 바로가기
728x90

opencv19

OpenCV 영상처리 - 특정 색상 영역 추출(cv2.inRange) RGB 색 공간에서 녹색 영역 추출하기 HSV 색 공간에서 녹색 영역 추출하기 밝기가 어두운 영상에서의 특정 영역 추출 RGB 색 공간에서 녹색 영역 추출하기 * RGB 색 공간에서 특정 영역을 추출 하는 경우 밝기에 영향을 받음 HSV 색 공간에서 녹색 영역 추출하기 * HSV 색 공간에서는 밝기에 비교적 영향을 받지 않는다. 특정 범위 안에 있는 행렬 원소 검출 cv2.inRange(src, lowerb, upperb, dst=None) -> dst src : 입력 행렬 lowerb : 하한 값 행렬 또는 스칼라 upperb : 상한 값 행렬 또는 스칼라 dst : 입력 영상과 같은 크기의 마스크 영상. (numpy.uint8) 범위 안에 들어가는 픽셀은 255, 나머지는 0으로 설정. src = c.. 2024. 3. 18.
OpenCV 영상처리 - 히스토그램 평활화(cv2.equalizeHist) 히스토그램 평활화(Histogram equalization) 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법 히스토그램 균등화, 균일화, 평탄화로 불리기도 한다. 히스토그램 평활화를 위한 변환 함수 구하기 히스토그램 함수 구하기 : h(g)=Ng​ 정규화된 히스토그램 함수 구하기 : p(g)=w×hh(g)​ 누적 분포 함수(cdf) 구하기 : cdf(g)=∑0≤i≤g​p(i) 변환 함수 : dst(x, y) = round(cdf(src(x, y)) x Lmax 히스토그램 평활화 계산방법 히스토그램 평활화와 히스토그램 누적 분포 함수와의 관계 히스토그램 평활화 함수 cv2.equalizeHist(src, dst=None) -> dst src : 입력 영상. 그레이.. 2024. 3. 18.
OpenCV 영상처리 - 명암비 조절, cv2.normalize 명암비(contrast) 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이 기본적인 명암비 조절 함수 s를 0.5로 두었을 때 픽셀의 최대값이 128로 낮아지며 영상이 어두워짐 s를 2로 두었을 때 픽셀의 최대값은 255으로 같지만 전체적으로 포화되는 부분이 많아짐 효과적인 명암비 조절 함수 위 함수를 통해 어느 한 쪽의 색으로 치우치지 않고 균일하게 명암비를 조절할 수 있다. * 명확히 정해진 명암비 조절 함수는 없고 내가 알맞게 조절하여 사용해야 함. 기본적인 명암비 조절 예제 src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSACLE) alpha = 1.0 dst = np.clip((1+alpha)*src - 128*alpha, 0, 255).astype(np... 2024. 3. 18.
OpenCV 영상처리 - 히스토그램 분석(cv2.calcHist) 히스토그램 영상의 픽셀 값 분포를 그래프의 형태로 표현한 것 예를 들어, 그레이스케일 영상에서 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고, 이를 막대 그래프의 형태로 표현 정규화된 히스토그램(Normalized histogram) 각 픽셀의 개수를 영상 전체 픽셀 개수로 나누어준 것 해당 그레이스케일 값을 갖는 픽셀이 나타날 확률 영상과 히스토그램의 관계 히스토그램을 보고 그림의 대략적인 밝기를 알 수 있다. 히스토그램 구하기 cv2.calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None) -> dst images : 입력 영상 리스트 channels : 히스토그램을 구할 채널을 나타내는 리스트 mask : 마스.. 2024. 3. 18.
OpenCV 영상처리 - 컬러 영상과 색 공간 OpenCV와 컬러 영상 컬러 영상은 3차원 numpy.ndarray로 표현. img.shape = (h, w, 3) OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본으로 사용 OpenCV에서 컬러 영상 다루기 img1 = cv2.imread('lenna.bmp', cv2.IMREAD_COLOR) img2 = np.zeros((480, 640, 3), np.uint8) img3 = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE) img4 = cv2.cvtColor(img3, cv2.COLOR_GRAY2BGR) img4의 경우, 영상의 각 픽셀은 B, G, R 색 성분 값이 모두 같게 설정됨 RGB 색 공간 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)을 .. 2024. 3. 18.
OpenCV 영상처리 - 산술 및 논리 연산 덧셈 연산 두 영상의 같은 위치에 존재하는 픽셀 값을 더하여 결과 영상의 픽셀 값으로 설정 덧셈 결과가 255보다 크면 픽셀 값을 255로 설정 (포화 연산) cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst src1 : (입력) 첫 번째 영상 또는 스칼라 src2 : (입력) 두 번째 영상 또는 스칼라 dst : (출력) 덧셈 연산의 결과 영상 mask : 마스크 영상 dtype : 출력 영상(dst)의 타입. (e.g.) cv2.CV_8U, cv2.CV_32F 등 참고사항 스칼라(scalar)는 실수 값 하나 또는 실수 값 네 개로 구성된 튜플 dst를 함수 인자로 전달하려면 dst의 크기가 src1, src2와 같아야 하며, 타입이 적절해야 .. 2024. 3. 18.
OpenCV 영상처리 - 밝기 조절 화소 처리 (Point processing) 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산 src(x,y) : 입력 x,y의 픽셀값 dst(x,y) : 출력 x,y의 픽셀값 결과 영상의 픽셀 값이 정해진 범위(ex. 그레이스케일)에 있어야 함. 반전, 밝기 조절, 명암비 조절 등 밝기 조절 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산 밝기 조절 수식 saturate : 일정 값 이상 또는 이하로 넘어가지 않도록 제한 하는 함수 영상의 밝기 조절을 위한 영상의 덧셈 연산 cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst src1 : (입력) 첫 번째 영상 또는 스칼라 src2 : (입력) 두 번째 .. 2024. 3. 18.
OpenCV 동영상 전환 이펙트 아래와 같이 동영상 두 개를 붙여 새로운 영상을 만들어 볼 것이다. 구현 할 기능 두 개의 동영상 동시 열기 첫 번째 동영상의 마지막 N개 프레임과 두 번째 동영상의 처음 N개 프레임을 합성 합성된 영상을 동영상으로 저장하기 import sys import numpy as np import cv2 import os os.chdir('C:\coding\OpenCV\ch02') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정 # 두 개의 동영상을 열어서 cap1, cap2로 지정 cap1 = cv2.VideoCapture('video1.mp4') cap2 = cv2.VideoCapture('video2.mp4') if not cap1.is.. 2024. 3. 16.
OpenCV 트랙바(cv2.createTrackbar) 트랙바(Trackbar) 프로그램 동작 중 사용자가 지정한 범위 안의 값을 선택할 수 있는 컨트롤 OpenCV에서 제공하는 (유일한?) 그래픽 사용자 인터페이스 트랙바 생성 함수 cv2.createTrackbar(trackbarName, windowName, value, count, onChange) -> None trackbarName: 트랙바 이름 windowName: 트랙바를 생성할 창 이름. value: 트랙바 위치 초기값 count: 트랙바 최대값 (최소값은 항상 0) onChange: 트랙바 위치가 변경될 때마다 호출할 콜백 함수 이름 트랙바 이벤트 콜백 함수는 다음 형식을 따름 onChange(pos) -> None 트랙바를 이용한 그레이스케일 레벨 표현 import numpy as np i.. 2024. 3. 16.
OpenCV 연산 시간 측정(cv2.TickMeter) OpenCV에서는 TickMeter 클래스를 이용하여 연산 시간을 측정 cv2.TickMeter() -> tm tm: cv2.TickMeter 객체 tm.start(): 시간 측정 시작 tm.stop(): 시간 측정 끝 tm.reset(): 시간 측정 초기화 tm.getTimeSec(): 측정 시간을 초 단위로 반환 tm.getTimeMilli(): 측정 시간을 밀리 초 단위로 반환 tm.getTimeMicro(): 측정 시간을 마이크로 초 단위로 반환 ex) img = cv2.imread('hongkong.jpg') tm = cv2.TickMeter() tm.reset() tm.start() edge = cv2.Canny(img, 50, 150) tm.stop() print('time:', (t2 - .. 2024. 3. 16.
OpenCV 키보드, 마우스 이벤트 처리 1. 키보드 이벤트 처리 간단히 'I' or 'i' 키를 눌렀을 때 고양이 사진을 반전하며 ESC 키를 눌렀을 때 이미지를 종료하는 코드를 작성해보았습니다. import sys import cv2 import os os.chdir('C:\coding\OpenCV\ch02') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정 img = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE) if img is None: print('Image load failed!') sys.exit() cv2.namedWindow('image') cv2.imshow('image', img) while True: keycode = c.. 2024. 3. 16.
OpenCV 카메라와 동영상 처리(cv2.VideoCapture, cv2.VideoWriter) 1. cv2.VideoCapture 클래스 OpenCV에서는 카메라와 동영상으로부터 프레임(frame)을 받아오는 작업을 cv2.VideoCapture 클래스 하나로 처리함 전체 코드 # 카메라 열기 cap = cv2.VideoCapture('video1.mp4') # 동영상 열기 # cap = cv2.VideoCapture(0) # 설정 되어 있는 카메라 열기 # 비디오 캡쳐가 준비되었는지 확인 if not cap.isOpened(): print("Camera open failed!") sys.exit() # 카메라 프레임 크기 출력 print('Frame width:', int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))) # 640 print('Frame height:', int(.. 2024. 3. 15.
OpenCV 그리기 함수(직선, 사각형, 원, 다각형, 문자열) ▪ 그리기 함수 사용 시 주의할 점 • 그리기 알고리즘을 이용하여 영상의 픽셀 값 자체를 변경 → 원본 영상이 필요하면 copy를 통해 그리기 & 출력 • 그레이스케일 영상에는 컬러로 그리기 불가 → cv2.cvtColor() 함수로 BGR 컬러 영상으로 변환한 후 그리기 함수 호출 1. 직선 cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None) -> img • img: 그림을 그릴 영상 • pt1, pt2: 직선의 시작점과 끝점. (x, y) 튜플 • color: 선 색상 또는 밝기. (B, G, R) 튜플 또는 정수값 • thickness: 선 두께. 기본값은 1 • lineType: 선 타입. cv2.LINE_4, cv2.. 2024. 3. 15.
OpenCV 마스크 연산& ROI ROI • Region of Interest, 관심 영역 •영상에서 특정 연산을 수행하고자 하는 임의의 부분 영역 마스크 연산 • OpenCV는 일부 함수에 대해 ROI 연산을 지원하며, 이때 마스크 이미지을 인자로 함께 전달해야 함 (e.g.) cv2.copyTo(), cv2.calcHist(), cv2.bitwise_or(), cv2.matchTemplate(), etc. • 마스크 이미지는 cv2.CV_8UC1 타입(그레이스케일 이미지) • 마스크 이미지의 픽셀 값이 0이 아닌 위치에서만 연산이 수행됨 → 보통 마스크 이미지로는 0 또는 255로 구성된 이진 영상(binary image)을 사용 ex) 아래와 같이 흑백 형태의 이미지를 만드는 것을 마스크 연산이라고 하고 흰색 부분(관심영역)을 RO.. 2024. 3. 15.
OpenCV 이미지(영상)의 생성, 복사, 부분 영상 추출 import numpy as np import cv2 import os os.chdir('C:\coding\OpenCV\ch02') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정 # 새 이미지(영상) 생성하기 img1 = np.empty((240, 320), dtype=np.uint8) # grayscale image img2 = np.zeros((240, 320, 3), dtype=np.uint8) # color image img3 = np.ones((240, 320), dtype=np.uint8) * 255 # white * 연산을 통해 흰색 생성 img4 = np.full((240, 320, 3), (0, 255, 255), d.. 2024. 3. 15.
OpenCV 이미지 속성, 크기, 픽셀 값 참조 OpenCV는 영상(이미지) 데이터를 numpy.ndarray로 표현 • 그레이스케일 영상(이미지): cv2.CV_8UC1 → numpy.uint8, shape = (h, w) • 컬러 영상(이미지): cv2.CV_8UC3 → numpy.uint8, shape = (h, w, 3) import sys import cv2 import os os.chdir('C:\coding\OpenCV\ch01') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정 # 이미지 불러오기 img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE) img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR).. 2024. 3. 15.
OpenCV 슬라이드쇼 만들기 import os import sys import glob import cv2 os.chdir('C:\coding\OpenCV\ch01') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정 # 이미지 파일을 모두 img_files 리스트에 추가 # os.listdir() 사용 방법 #file_list = os.listdir('.\\images') #img_files = [os.path.join('.\\images', file) for file in file_list if file.endswith('.jpg')] # glob.glob() 사용 방법 img_files = glob.glob('.\\images\\*.jpg') # 현재 폴더(... 2024. 3. 14.
OpenCV Matplotlib 사용하여 이미지(영상) 출력 import matplotlib.pyplot as plt import cv2 import os os.chdir('C:\coding\OpenCV\ch01') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정 # 컬러 영상 출력 imgBGR = cv2.imread('cat.bmp') imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB) plt.axis('off') plt.imshow(imgRGB) # = plt.imshow(cv2.cvtColor(cv2.COLOR_BGR2RGB)) plt.show() # 그레이스케일 영상 출력 imgGray = cv2.imread('cat.bmp', cv2.IMREAD_GR.. 2024. 3. 14.
728x90
반응형