You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:10:39