fruits_imgs = cv2.imread("./fruit.png")
fruits_img = cv2.resize(fruits_imgs, dsize=(400,400))
fruits_img_HSV = cv2.cvtColor(fruits_img,cv2.COLOR_BGR2HSV)영역 설정하기(0~5, 170~179에 빨강색 영역이 존재)
lower_red = cv2.inRange(fruits_img_HSV,(0,100,100),(5,255,255))
upper_red = cv2.inRange(fruits_img_HSV,(170,100,100),(180,255,255))
added_red = cv2.addWeighted(lower_red, 1.0, upper_red, 1.0,0.0)
영역 구분 후 출력하기
result = cv2.bitwise_and(fruits_img,fruits_img, mask=added_red)
cv2.imshow("origin",fruits_img)
cv2.imshow("HSV",fruits_img_HSV)
cv2.imshow("red_HSV",added_red)
cv2.imshow("origin_red",result)
cv2.waitKey(0)
cv2.destroyAllWindows()
mask : 계산할 영역을 지정해주는 역할
yellow = cv2.inRange(fruits_img_HSV,(22,100,100),(45,255,255))
result = cv2.bitwise_and(fruits_img,fruits_img, mask=yellow)
cv2.imshow("binary_yellow",yellow)
cv2.imshow("origin_yellow",result)
cv2.waitKey(0)
cv2.destroyAllWindows()
egg_img = cv2.imread("./egg/25.png")
print(egg_img.shape)
egg_face_img = egg_img[30:120, 55:200]
cv2.imshow('egg',egg_img)
cv2.imshow('egg_face',egg_face_img)
cv2.waitKey(0)
cv2.destroyAllWindows() egg_img[30:120, 55:200](행, 열) 자를 영역을 설정한다.
cv2.line(이미지, 시작점 좌표, 끝점 좌표, 색상, 두께) : 선 그리기
cv2.circle(이미지, 중심 좌표, 반지름, 색상, 두께) : 원 그리기
cv2.rectangle(이미지, 좌상단 좌표, 우하단 좌표, 색상, 두께) : 사각형 그리기
cv2.eilipse(이미지, 중심좌표, 장축길이/단축길이, 시작각도, 끝각도, 색상, 두께) : 타원그리기
cv2.putText(이미지, 출력내용, 시작좌표, 폰트, 크기, 색상, 굵기) : 텍스트 출력
rectangle, 문구 출력하기
egg_img = cv2.imread("./egg/25.png")
print(egg_img.shape)
#ROI영역에 사각형 그리기
cv2.rectangle(egg_img,(50,100),(150,30),(255,0,0),2)
#글자 출력하기
cv2.putText(egg_img,'egg',(70,140),cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),1)
cv2.imshow('egg',egg_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

circle, 문구 사용하기
egg_img = cv2.imread("./egg/25.png")
print(egg_img.shape)
#ROI영역에 사각형 그리기
cv2.circle(egg_img,(100,65),50,(255,0,0),2)
#글자 출력하기
cv2.putText(egg_img,'egg',(70,140),cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),1)
cv2.imshow('egg',egg_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

머신러닝 기반의 얼굴 검출 모델활용
haar casecade 기반의 알고리즘
cv2.data.haarcascades#얼굴 검출 모델 사용하기
face_model = cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_frontalface_default.xml")
face_img=cv2.imread('./face.png')
#얼굴 검출 : 사진이 그레이스케일 이미지여야 한다.(현재는 함수 내부적으로 처리)
#detectMultiScale(이미지,스케일,최소이웃값)
faces = face_model.detectMultiScale(face_img, 1.2, 5)
print(len(faces))
#print(faces) #얼굴이라 예측되는 좌표를 알려줌
for(x,y,w,h) in faces :
cv2.rectangle(face_img,(x,y),(x+w,y+h),(0,0,255),2)
cv2.imshow("face",face_img)
cv2.waitKey(0)
cv2.destroyAllWindows()#얼굴 검출 모델 사용하기
face_model = cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_frontalface_default.xml")
face_img=cv2.imread('./face.png')
#얼굴 검출 : 사진이 그레이스케일 이미지여야 한다.(현재는 함수 내부적으로 처리)
#detectMultiScale(이미지,스케일,최소이웃값)
faces = face_model.detectMultiScale(face_img, 1.2, 5)
print(len(faces))
#print(faces) #얼굴이라 예측되는 좌표를 알려줌
n=0
for(x,y,w,h) in faces :
cv2.rectangle(face_img,(x,y),(x+w,y+h),(0,0,255),2)
#관심영역 자르기 - > image[시작행:끝행, 시작열:끝열]
tmp = face_img[y:y+h, x:x+w]
n+=1
cv2.imshow('face'+str(n),tmp)
cv2.imshow("face",face_img)
cv2.waitKey(0)
cv2.destroyAllWindows()#반복문 이용해서 영상출력하기
#얼굴 검출 모델 사용하기
face_model = cv2.CascadeClassifier(cv2.data.haarcascades+"haarcascade_frontalface_default.xml")
try :
print("영상로딩을 시작합니다..")
video_cap = cv2.VideoCapture("./jung.mp4")# 0은 실시간
while True :
ret, frame = video_cap.read()
if ret :
#얼굴 검출 코드 추가
faces = face_model.detectMultiScale(frame,1.2,3)
for(x,y,w,h) in faces :
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),3)
cv2.imshow("video",frame)
k = cv2.waitKey(38)#초당 프레임수를 맞추기 위함 : 1000/24
else :
break;
if k == 27: #27번은 ecs
break;
cv2.destroyAllWindows()
video_cap.release()
except :
print("영상로딩 실패")