PPG_Delattre_Dey/RGB_channels.py

70 lines
1.7 KiB
Python

import cv2
from PIL import Image
import csv
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
image = "frames/frame1.jpg"
read_img = cv2.imread(image)
#cv2.imshow('img',imRGB)
#cv2.waitKey(0)
def RGB_dataframe(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
# To draw a rectangle in a face
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
list_ex = []
list_ey = []
list_ew = []
list_eh = []
#To draw a rectangle in eyes
for (ex,ey,ew,eh) in eyes:
if ew >= 80 and eh >= 80:
#cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,127,255),2)
list_ex.append(ex)
list_ey.append(ey)
list_ew.append(ew)
list_eh.append(eh)
#rectangle on forhead
fx = min(list_ex) + list_ew[list_ex.index(min(list_ex))]
fy = max(list_ey)
#extra values in x and y in the parameters are adjustements made after manual testing
cv2.rectangle(roi_color, (fx,fy-150),(fx+100,fy-20),(0,127,255),2)
imS = cv2.resize(img, (960, 540))
#cv2.imshow('img',imS)
#cv2.waitKey(0)
x1 = x + fx
x2 = x + fx + 100
y1 = y + fy - 150
y2 = y + fy - 20
imRGB = img[y1:y2, x1:x2]
#cv2.imshow('img',imRGB)
#cv2.waitKey(0)
size_list = list(imRGB.shape[:2])
pixel_values = []
for i in range(0, size_list[0]):
for j in range(0, size_list[1]):
k = imRGB[i,j]
pixel_values.append(k)
fields = ['R', 'G', 'B']
with open('RGB_data.csv', 'w', newline="") as f:
write = csv.writer(f)
write.writerow(fields)
write.writerows(pixel_values)
return
RGB_dataframe(read_img)