这里写自定义目录标题
图片中RGB,HSV,Lab特征值的提取,python的实现
下面展示一些 内联代码片
。
# -*- coding: utf-8 -*-
import cv2
import pandas as pd
import os
## 判断是否存在文件夹
def dir_out(path_out):
folder = os.path.exists(path_out)
if not folder:
os.makedirs(path_out)
print("--- new folder... ---")
print("--- OK ---")
else:
print("--- There is this folder! ---")
## 使用cv2读取视频中的图片信息,并保存csv文件
def extract_colors_from_videos(filenames, names):
for filename, name in zip(filenames, names):
print(filename, name)
# 打开视频
cap = cv2.VideoCapture(filename)
frame_cnt = 0
# 读取每一帧
f_index = [];gray_avg = [];r_avg = [];g_avg = [];b_avg = [];h_avg = [];s_avg = [];v_avg = [];l_avg = [];alpha_avg = [];beta_avg = []
while True:
ret, frame = cap.read()
if ret: #如果成功的话,打印每帧的次数,图片的尺寸,这个视频的帧数
print("frame_cnt:", frame_cnt, "image_size:", len(frame[0]), len(frame))
frame_cnt += 1
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转换为灰度
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 转换为 RGB
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 转换为 HSV
lab_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB) # 转换为 LAB
# 分离每个特征值
r, g, b = cv2.split(rgb_frame)
h, s, v = cv2.split(hsv_frame)
l, alpha, beta = cv2.split(lab_frame)
# 整张图片的像素求(mean=平均值,或者std=均差)
f_index.append(frame_cnt)
# gray_avg.append(gray_frame.std());r_avg.append(r.std());g_avg.append(g.std())
# b_avg.append(b.std());h_avg.append(h.std());s_avg.append(s.std());v_avg.append(v.std());l_avg.append(l.std())
# alpha_avg.append(alpha.std());beta_avg.append(beta.std())
gray_avg.append(gray_frame.mean());r_avg.append(r.mean());g_avg.append(g.mean())
b_avg.append(b.mean());h_avg.append(h.mean());s_avg.append(s.mean());v_avg.append(v.mean());l_avg.append(l.mean())
alpha_avg.append(alpha.mean());beta_avg.append(beta.mean())
else: # 如果是最后,终止
break
# 写到csv文件中
data = {'frame':f_index,'gray':gray_avg, 'r': r_avg, 'g': g_avg, 'b': b_avg, 'h': h_avg, 's': s_avg, 'v': v_avg, 'l': l_avg, 'alpha': alpha_avg, 'beta': beta_avg}
cols = ['frame','gray','r', 'g', 'b', 'h', 's', 'v', 'l', 'alpha', 'beta']
result = pd.DataFrame(data, columns=cols)
result.to_csv(path_out + name +'_image.csv')
# 关闭视频
cap.release()
dir = '视频的文件夹地址'
filenames = []
names = []
for file in os.listdir(dir):
if file.endswith(".mp4"):
filenames.append(dir + file)
names.append(file.split(".")[0])
path_out = '储存csv文件的地址'
# dir_out(path_out)
extract_colors_from_videos(filenames, names)