将循环生成的numpy.uint8类型众数数据写入CSV遇迭代错误求助
问题分析与解决
错误根源
writerows()要求传入可迭代的行数据(比如[[60], [40]]这种嵌套列表格式),但你生成的Modus_citra是单个numpy.uint8数值,无法被迭代,直接传入就会触发'numpy.uint8' object is not iterable报错。- 每次循环都用
'w'模式打开文件,会清空之前写入的内容,最终CSV里只会保留最后一张图的计算结果。
解决方案1:修正CSV模块写法
推荐先收集所有结果再一次性写入,减少IO操作:
import glob import cv2 import numpy as np import csv def find_mode(np_array): vals, counts = np.unique(np_array, return_counts=True) index = np.argmax(counts) return vals[index] # 先收集所有图像的计算结果 results = [] folder = "C:/Users/ROG FLOW/Desktop/Untuk SIDANG TA/Sudah Aman/testbikincsv/folderdatacitra/*.jpg" for file in glob.glob(folder): image = cv2.imread(file) rows = image.shape[0] cols = image.shape[1] middlex = cols / 2 middley = rows / 2 titikawalx = middlex - 10 titikawaly = middley - 10 titikakhirx = middlex + 10 titikakhiry = middley + 10 crop = image[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) results.append([Modus_citra]) # 把单个数值包装成单行列表 # 一次性写入所有数据到CSV with open("foo.csv", 'w', newline='') as file: writer = csv.writer(file) writer.writerows(results)
解决方案2:用Pandas简化实现
如果你已经导入了Pandas,用DataFrame写入会更简洁:
import glob import cv2 import numpy as np import pandas as pd def find_mode(np_array): vals, counts = np.unique(np_array, return_counts=True) index = np.argmax(counts) return vals[index] results = [] folder = "C:/Users/ROG FLOW/Desktop/Untuk SIDANG TA/Sudah Aman/testbikincsv/folderdatacitra/*.jpg" for file in glob.glob(folder): image = cv2.imread(file) rows = image.shape[0] cols = image.shape[1] middlex = cols / 2 middley = rows / 2 titikawalx = middlex - 10 titikawaly = middley - 10 titikakhirx = middlex + 10 titikakhiry = middley + 10 crop = image[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) results.append(Modus_citra) # 直接生成CSV,每行一个数值,去掉索引和表头 pd.DataFrame(results).to_csv("foo.csv", index=False, header=False)
内容的提问来源于stack exchange,提问作者fera fani
相关产品推荐
相关产品推荐

