본문 바로가기

OpenCV-Python

(20)
OpenCV Python 원하는 이미지 영역 잘라내기(붙이기) 이미지 잘라내기 코드 img_cut = img[y1:y2, x1:x2] 잘라내고 싶은 특정 부분의 y값과 x값을 선언하면 그 부분만 따로 볼 수 있습니다. - 마지막 코드 확인 이미지 붙이기 import cv2 import numpy as np img = cv2.imread('02.jpg') img2 = cv2.imread('03.jpg') img_con = np.concatenate([img, img2], axis=0) img_con2 = np.concatenate([img, img2], axis=1) cv2.imshow('show', img_con) cv2.imshow('show2', img_con2) cv2.waitKey(0) ① np.concatenate((a1, a2, ...), axis = 0..
dlib 눈 인식(Ear 알고리즘을 이용한 졸음인식) EAR(Eye Aspect Ratio) 알고리즘은 눈의 비율을 이용해 눈 감김을 확인합니다. def calculate_EAR(eye): # 눈 거리 계산 A = distance.euclidean(eye[1], eye[5]) B = distance.euclidean(eye[2], eye[4]) C = distance.euclidean(eye[0], eye[3]) ear_aspect_ratio = (A+B)/(2.0*C) return ear_aspect_ratio EAR 계산 for n in range(36,42): # 오른쪽 눈 감지 x = face_landmarks.part(n).x y = face_landmarks.part(n).y leftEye.append((x,y)) next_point = n+1 ..
OpenCV Python 얼굴 검출(dlib) dlib 라이브러리 : 기계 학습 알고리즘, 이미지 처리 등의 기능을 가지는 툴킷으로, 기존에 C++로 작성된 툴킷이지만, python 패키지로도 설치해 사용할 수 있습니다. conda install -c conda-forge dlib 저는 아나콘다를 사용하기 때문에 위의 코드를 설치합니다. import cv2 import dlib detector = dlib.get_frontal_face_detector() cap = cv2.VideoCapture(0) while True: ret, img = cap.read() if ret == False: break dets = detector(img) print("number of faces detected:", len(dets)) print(dets) for d..
OpenCV Python 히스토그램 역투영 히스토그램 역투영 : 영상의 각 픽셀이 주어진 히스토그램 모델에 얼마나 일치하는지를 검사하는 방법 임의의 색상 영역 검출할 때 효과적 cv2.calcBackProject(images, channels, hist, ranges, scale [, dst]) [] : 생략 가능 import cv2 import numpy as np src = cv2.imread('imgs/dog.jpg') x, y, w, h = cv2.selectROI(src) src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb) crop = src_ycrcb[y:y+h, x:x+w] channels = [1, 2] cr_bins = 128 cb_bins = 128 histSize = [cr_bins, c..
OpenCV Python 색상 영역 검출 색상 영역 검출은 말 그대로 사진에서 해당 범위 안의 색상을 표시해줍니다. cv2.inRange(src, lowerb, upperb [, dst]) [] : 생략 가능 import cv2 import numpy as np src1 = cv2.imread('imgs/flower.jpg') src1_hsv = cv2.cvtColor(src1, cv2.COLOR_BGR2HSV) dst1 = cv2.inRange(src1, (0, 0, 100), (150, 150, 255)) # B : 0 ~ 150, G : 0 ~ 150, R : 100 ~ 255 dst2 = cv2.inRange(src1_hsv, (160, 200, 0), (179, 255, 255)) # H(색상) : 160 ~ 179, S(채도) : 1..
OpenCV Python 히스토그램 평활화 히스토그램 평활화(= 균일화, 균등화, 평탄화) : 히스토그램이 그레이 스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법 이 방법은 정규화와 다릅니다. 정규화는 벌어진 부분 균일 평활화의 경우 픽셀 값이 많이 뭉쳐있는 부분 넓게 벌어져있고, 적게 있는 부분 조금 벌어져있습니다. cv2.equalizeHist(src [, dst]) [] : 생략 가능 import cv2 import numpy as np import matplotlib.pyplot as plt src1 = cv2.imread('imgs/Lenna.png', cv2.IMREAD_GRAYSCALE) # 원본 hist1 = cv2.calcHist([src1], [0], None, [ 256], [0, 256]) plt.s..
OpenCV Python 영상 명암비 조절(정규화) 명암비 : 밝은 곳, 어두운 곳 사이의 밝기 정도 차이 1) 명암비 조절 : dst(x, y) = saturate(s*src(x, y)) 기울기가 작아 확 어두워지거나 기울기가 커서 값들이 대부분의 픽셀 값이 255가 되어 너무 밝아지겠네요. 2) 효과적인 명암비 조절 : dst(x, y) = saturate(src(x, y) + (src(x, y)-128)*a) 위 식의 경우 모든 픽셀 값이 128을 지나게 됩니다. ※ 이 방법도 너무 밝은(대부분의 픽셀 값이 255쪽), 너무 어두운(대부분의 픽셀 값이 0쪽) 일 경우엔 원하는 결과가 안 나올 수도 있습니다. import cv2 import numpy as np src = cv2.imread('imgs/dog.jpg', cv2.IMREAD_GRAYSC..
OpenCV Python 히스토그램 분석 히스토그램 : 영상의 픽셀값 분포를 그래프의 형태로 표현한 것 cv2.calcHist(images, channel, mask, histSize, ranges [, hist [, accumulate]]) [] : 생략 가능 images : 입력 영상 - 리스트 형식[] channels : 히스토그램 구할 채널을 나타내는 리스트 [0], [0,1], [0,1,2] GRAYSCALE 영상에선 [0] BGR 영상에선 [0] : B, [1] : G, [2] : R 이 되겠네요 mask : 마스크 영상, 입력 영상 전체에 히스토그램 구하려면 None histSize : 히스토그램 각 차원의 크기를 나타내는 리스트 64로 하면 0~3, 4~7 이런 식으로 4개씩 묶여 64개 128로 하면 0~1, 2~3 이런 식으로..