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

如何将提取的图像Hu矩特征作为单行存入Pandas DataFrame

问题原因分析
  • 缩进错误:原代码中向DataFrame追加数据的逻辑被放在了遍历单张图像的内层循环之外,遍历同一个类别下的所有图像时,存储特征的变量会被反复覆盖,最终仅会保留每个类别下最后一张图像的特征
  • 数据格式传入错误:调用append方法时传入一维列表,pandas会默认将列表的每个元素作为单独行存入同一列,不会识别为单行多列数据
  • 冗余代码:原代码内层循环中定义的空DataFrame变量没有实际作用,属于冗余逻辑
修改方案

建议先将所有图像的Hu矩特征存入临时列表,最后一次性转为DataFrame,避免循环中频繁调用append带来的性能损耗,修改后完整代码如下:

import numpy as np
import cv2
import os
import pandas as pd

data_path = "/content/drive/My Drive/ADIP/seperate_ricepests6/seperate_ricepests6/"

# 先定义临时列表存储所有图像的Hu矩特征
hu_features = []
labels = os.listdir(data_path)

for dirname in labels:
    filepath = os.path.join(data_path, dirname)
    print("Extracting ", dirname, " ... ")
    for file in os.listdir(filepath):
        filename = os.path.join(filepath, file)       
        image = cv2.imread(filename)
        image_resized = cv2.resize(image, (300,300))
        image_gray = cv2.cvtColor(image_resized, cv2.COLOR_BGR2GRAY)

        # 提取7维Hu矩特征
        image_hu = cv2.HuMoments(cv2.moments(image_gray)).flatten()
        # 将当前图像的特征作为子列表加入总特征列表
        hu_features.append(image_hu.tolist())
    print(dirname, "ok!")

# 一次性将总特征列表转为DataFrame,支持自定义列名
image_Humoment = pd.DataFrame(hu_features, columns=[f'hu_{i+1}' for i in range(7)])
效果验证

最终得到的image_Humoment行数等于所有图像总数量,共7列,每列对应一个Hu矩特征值。如果需要同时存储图像对应的类别标签,可在提取特征时同步把类别名加入列表,转为DataFrame时增加对应列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:27:01