Python循环中将numpy数组(np.uint8)写入CSV的方法求助
解决方法:将图片处理结果写入CSV文件
下面提供两种实用的实现方式,你可以根据需求选择:
方法1:使用Python内置csv模块(无需额外安装依赖)
这种方式不需要额外安装库,适合轻量需求:
import csv import glob import cv2 import numpy as np def find_mode(np_array) : vals,counts = np.unique(np_array, return_counts=True) index = np.argmax(counts) return(vals[index]) # 定义CSV文件保存路径 csv_save_path = "C:/Users/ROG FLOW/Desktop/Untuk SIDANG TA/Sudah Aman/testbikincsv/result.csv" folder = ("C:/Users/ROG FLOW/Desktop/Untuk SIDANG TA/Sudah Aman/testbikincsv/folderdatacitra/*.jpg") # 打开CSV文件并初始化写入器 with open(csv_save_path, mode='w', newline='') as csv_file: writer = csv.writer(csv_file) # 写入表头(可选,方便后续识别数据含义) writer.writerow(["图片文件名", "H通道众数"]) for file in glob.glob(folder): a = cv2.imread(file) rows = a.shape[0] cols = a.shape[1] middlex = cols/2 middley = rows/2 titikawalx = middlex - 10 titikawaly = middley - 10 titikakhirx = middlex + 10 titikakhiry = middley + 10 crop = a[int(titikawaly):int(titikakhiry), int(titikawalx):int(titikakhirx)] c = cv2.cvtColor(crop, cv2.COLOR_BGR2HSV) H,S,V = cv2.split(c) Modus_citra = find_mode(H) # 提取图片文件名(也可以直接存完整路径) filename = file.split("/")[-1] # 将当前图片的结果写入CSV一行 writer.writerow([filename, Modus_citra])
说明:
with open()语句会自动处理文件关闭,避免资源泄漏- 如果不需要表头,直接删除
writer.writerow(["图片文件名", "H通道众数"])这一行即可 Modus_citra是np.uint8类型,写入CSV时会自动转为整数,无需额外转换
方法2:使用pandas(适合后续需要数据分析的场景)
如果需要对数据做进一步分析,用pandas会更便捷(需先通过pip install pandas安装):
import pandas as pd import glob import cv2 import numpy as np def find_mode(np_array) : vals,counts = np.unique(np_array, return_counts=True) index = np.argmax(counts) return(vals[index]) folder = ("C:/Users/ROG FLOW/Desktop/Untuk SIDANG TA/Sudah Aman/testbikincsv/folderdatacitra/*.jpg") # 初始化空列表用于收集所有数据 data_collection = [] for file in glob.glob(folder): a = cv2.imread(file) rows = a.shape[0] cols = a.shape[1] middlex = cols/2 middley = rows/2 titikawalx = middlex - 10 titikawaly = middley - 10 titikakhirx = middlex + 10 titikakhiry = middley + 10 crop = a[int(titikawaly):int(titikakhiry), int(titikawalx):int(titikakhirx)] c = cv2.cvtColor(crop, cv2.COLOR_BGR2HSV) H,S,V = cv2.split(c) Modus_citra = find_mode(H) filename = file.split("/")[-1] # 将当前数据以字典形式加入列表 data_collection.append({"图片文件名": filename, "H通道众数": Modus_citra}) # 转换为DataFrame并保存为CSV result_df = pd.DataFrame(data_collection) result_df.to_csv("C:/Users/ROG FLOW/Desktop/Untuk SIDANG TA/Sudah Aman/testbikincsv/result_pandas.csv", index=False)
说明:
- 先把所有数据收集到列表,最后一次性写入CSV,大数量图片场景下效率更高
index=False避免把DataFrame的索引写入CSV文件
内容的提问来源于stack exchange,提问作者fera fani
相关产品推荐
相关产品推荐

