首页 > 解决方案 > 打印数据框中图像的文件名

问题描述

import cv2 as cv
import glob
import numpy as np
from skimage import io
import pandas as pd
from colormath.color_objects import sRGBColor, xyYColor, LabColor, XYZColor
from colormath.color_conversions import convert_color
import xlsxwriter
import os


path = "C:/Users/User/Desktop/Color/Fontane/36/*.jpg"
img_number = 1

for file in glob.glob(path):
    print(file)
    img = cv.imread(file)
    scale_percent = 60
    width = int(img.shape[1] * scale_percent / 100)
    height = int(img.shape[0] * scale_percent / 100)
    dim = (width, height)
    imgr = cv.resize(img, dim, interpolation=cv.INTER_AREA)

    hsv = cv.cvtColor(imgr, cv.COLOR_BGR2HSV)
    blur0 = cv.medianBlur(hsv, 11)

    low_yellow = np.array([17, 25, 210])
    high_yellow = np.array([30, 255, 255])

    mask = cv.inRange(blur0, low_yellow, high_yellow)
    res = cv.bitwise_and(imgr, imgr, mask=mask)

    fname = os.path.splitext(os.path.basename(file))[0]

    cv.imwrite(f'C:/Users/User/Desktop/Color/Fontane/36/SEG/{fname}.jpg',res)

path1 = "C:/Users/User/Desktop/Color/Fontane/36/SEG/*.jpg"
img_number = 1

result_df = pd.DataFrame()
for file in glob.glob(path1):
    image = io.imread(file)
    x = image[np.all(image != 0, axis=2)].mean(axis=0)
    result_df = pd.concat((result_df, pd.DataFrame(x)), axis=1)
    df_t = result_df.T
    fname = os.path.splitext(os.path.basename(file))[0]
    df_t['name'] = fname
    df_t.columns = ['R', 'G', 'B', 'Filename']
    df_t.loc['Mean'] = df_t.mean()
    df_t = df_t.round(decimals=1)



    writer = pd.ExcelWriter("C:/Users/User/Desktop/Color/Fontane/RGB/36.xlsx", engine='xlsxwriter')

    df_t.to_excel(writer, sheet_name='RGB')
   

    writer.save()

此代码为我提供了分割图像的平均 RGB 值。我将这些值写入 Excel 中的数据框中。由于我发现此数据框中的第一个值并不总是与我文件夹中的第一个图像匹配,因此我尝试在 excelsheet 中打印每个图像的文件名。. 我做了一些实验,但如您所见:打印的文件名在每个单元格中都是相同的。看起来它正在覆盖自己。

在此处输入图像描述

我不知道如何解决这个问题,有人有什么想法吗?

先感谢您

标签: pythonexcelpandasdataframeopencv

解决方案


推荐阅读