import cv2
import numpy as np
import math
import glob
import matplotlib.pyplot as plt
import xlsxwriter

directory = '/directory_path'
path = directory + '/*.jpg'
filenames = glob.glob(path, recursive=False)
filenames.sort()
images = [cv2.imread(image) for image in filenames]
imgs = np.array(images, dtype=object)
volume_all = []
normalized_volume = []
mid_d_all = []
normalized_mid_d_all = []
h_all = []
normalized_h = []

gray_0 = cv2.cvtColor(images[0], cv2.COLOR_BGR2GRAY)
local_pixel_d0 = np.count_nonzero(gray_0 <= 50, axis=1)
median0 = int(len(local_pixel_d0) / 2)
median_pixel_d = np.mean(local_pixel_d0[median0-0:median0+60])

for i in range(len(images)):
    gray = cv2.cvtColor(images[i], cv2.COLOR_BGR2GRAY)
    local_pixel_d = []
    local_pixel_d.append(np.count_nonzero(gray >= 200, axis=1))
    local_d = []
    gel = []
    local_d.append(local_pixel_d[0])
    
    for k in range(len(local_d[0])):
        if local_d[0][k] > 0.7:
            gel.append(local_d[0][k])
    
    pixel_height = (local_pixel_d[0]).sum()
    height = pixel_height
    local_height = height / pixel_height
    
    local_volume = []
    for l in range(len(local_d[0])):
        local_volume.append((local_d[0][l]**2) * math.pi / 4 * local_height)
    
    volume = np.sum(local_volume)
    volume_all.append(volume)
    normalized_volume.append(volume / volume_all[0])
    
    median = int(len(gel) / 2)
    mid_d_all.append(np.mean(gel[median-45:median+45]))
    normalized_mid_d_all.append(mid_d_all[i] / mid_d_all[0])
    
    gel_center = cv2.moments(gray)
    if gel_center["m00"] >= 200:
        cX = int(gel_center["m10"] / gel_center["m00"])
        cY = int(gel_center["m01"] / gel_center["m00"])
    else:
        cX, cY = 0, 0
    
    local_pixel_h = []
    local_pixel_h.append(np.count_nonzero(gray >= 200, axis=0))
    h_all.append(local_pixel_h[0][cX])
    normalized_h.append(h_all[i] / h_all[0])

columns = [volume_all, normalized_volume, mid_d_all, normalized_mid_d_all, h_all, normalized_h]
workbook = xlsxwriter.Workbook(directory + '\\workbook_name.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_string(0, 0, 'Gel volume,cm3')
worksheet.write_string(0, 1, 'Normalized volume')
worksheet.write_string(0, 2, 'Diammeter, cm')
worksheet.write_string(0, 3, 'Normalized diammeter')
worksheet.write_string(0, 4, 'Height, cm')
worksheet.write_string(0, 5, 'Normalized height')

for col, data in enumerate(columns):
    worksheet.write_column(1, col, data)

workbook.close()
