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

单张图片多ROI裁剪区域RGB值写入CSV的代码问题求助

问题原因

代码中将CSV文件写入逻辑放在了ROI遍历循环内部,且使用了w(覆盖写入)模式打开文件,每一轮循环都会清空文件之前的所有内容,最终只会保留最后一轮循环写入的裁剪区域数据。同时重复写入表头也会导致CSV格式错乱。

调整方案

将CSV文件初始化、表头写入逻辑移到循环外部,循环内仅追加写入当前裁剪区域的RGB数据即可,修改后的完整代码如下:

from __future__ import with_statement
import cv2
import numpy as np
import csv

# 图像路径
img_path="gr.jpg"

# 读取图像
img_raw = cv2.imread(img_path)

# 框选多个ROI,选完一个按空格/回车确认下一个,全部选完按ESC结束
ROIs = cv2.selectROIs("Select Rois",img_raw)

# 打印选中的ROI坐标参数
print(ROIs)

# 打开CSV文件,一次性完成表头写入和所有数据写入
with open('output_file.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output)
    # 写入表头
    csv_output.writerow(["img_name", "R", "G", "B"])  
    
    crop_number=0 
    # 遍历所有选中的ROI
    for rect in ROIs:
        x1=rect[0]
        y1=rect[1]
        w=rect[2]
        h=rect[3]

        # 裁剪对应区域
        img_crop=img_raw[y1:y1+h, x1:x1+w]
        b,g,r = cv2.split(img_crop)

        # 计算RGB平均值
        B = b.mean()
        G = g.mean()
        R = r.mean()
            
        # 显示裁剪结果
        cv2.imshow("crop"+str(crop_number),img_crop)
        # 保存裁剪图片
        cv2.imwrite("crop"+str(crop_number)+".jpg",img_crop)
        
        # 写入当前ROI的RGB数据
        csv_output.writerow(["crop"+str(crop_number), R, G, B])
      
        crop_number+=1
  
# 等待按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者Rakesh Sharbidre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:30:05