이미지 색상 분포 균일화
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('data/histogram.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('original',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
hist= cv2.calcHist([img],[0],None,[256],[0,256])
plt.plot(hist)
plt.xlim([0,255])
plt.show()
img = cv2.equalizeHist(img)
cv2.imshow('equalize',img)
hist= cv2.calcHist([img],[0],None,[256],[0,256])
plt.plot(hist)
plt.xlim([0,255])
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
이미지 원찾기
import cv2
import numpy as np
img=cv2.imread('data/signal_light.jpg')
img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
circles = cv2.HoughCircles(img_gray, cv2.HOUGH_GRADIENT,1,10,
param1 = 60,
param2 = 50,
minRadius = 10,
maxRadius = 100)
print(circles)
if circles is not None:
circles= np.uint16(np.around(circles))
for circle in circles[0,:] :
cv2.circle(img,(circle[0],circle[1]),circle[2],(255,0,0),4)
cv2.imshow('circle',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
템플릿매칭
import cv2
import numpy as np
img=cv2.imread('data/game.png')
img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
temp=cv2.imread('data/game_cut.png',cv2.IMREAD_GRAYSCALE)
h,w=temp.shape
res=cv2.matchTemplate(img_gray, temp, cv2.TM_CCOEFF_NORMED)
loc = np.where(res>=0.678)
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0]+w, pt[1]+h),(0,255,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
loc[::-1]
arr = np.arange(10)
arr[::2]
arr[::-2]
arr[1::2]
arr[1:6:2]
Haar Cascade 분류기를 사용한 얼굴, 눈 검출
import cv2
face_cascade = cv2.CascadeClassifier("data/haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("data/haarcascade_eye.xml")
img= cv2.imread('data/face.jpg')
img_gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
faces = face_cascade.detectMultiScale(img_gray,1.3,5)
faces
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray= img_gray[y:y+h,x:x+w]
roi_color=img[y:y+h,x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray,1.035,2)
for (ex, ey, ew, eh) in eyes :
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,0,255),2)
cv2.imshow('face',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
동영상 얼굴 검출
cap = cv2.VideoCapture('data/ellon.mp4')
face_cascade = cv2.CascadeClassifier("data/haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier("data/haarcascade_eye.xml")
while True:
ret, frame = cap.read()
if not ret :
print('동영상을 종료합니다.')
cap.release()
cv2.destraoyAllWindows()
break
img_gray=cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
faces = face_cascade.detectMultiScale(img_gray,1.3,5)
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray= img_gray[y:y+h,x:x+w]
roi_color=frame[y:y+h,x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray,1.035,1)
for (ex, ey, ew, eh) in eyes :
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,0,255),2)
cv2.imshow('face',frame)
k=cv2.waitKey(10)
if k==49:
cap.release()
cv2.destroyAllWindows()
break
import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_face_mesh = mp.solutions.face_mesh
drawing_spec= mp_drawing.DrawingSpec(thickness=1,circle_radius=1)
cap = cv2.VideoCapture('data/face3.mp4')
results=None
with mp_face_mesh.FaceMesh(min_detection_confidence=0.5,
min_tracking_confidence=0.5) as face_mesh:
while True:
ret, frame = cap.read()
if not ret:
cap.release()
cv2.destroyAllWindows()
break
frame.flags.writeable = False
results = face_mesh.process(frame)
frame.flags.writeable= True
if results.multi_face_landmarks:
for face_landmark in results.multi_face_landmarks:
mp_drawing.draw_landmarks(
image = frame,
landmark_list= face_landmark,
connections = mp_face_mesh.FACEMESH_TESSELATION,
landmark_drawing_spec=drawing_spec,
connection_drawing_spec=drawing_spec
)
cv2.imshow('face',frame)
k= cv2.waitKey(33)
if k ==49:
cap.release()
cv2.destroyAllWindows()
break