📜  使用Python将图像属性保存到 CSV

📅  最后修改于: 2022-05-13 01:55:43.760000             🧑  作者: Mango

使用Python将图像属性保存到 CSV

在本文中,我们将编写Python脚本来查找高度、宽度、编号。给定图像文件中的通道数并将其保存为 CSV 格式。下面是使用 Python3 的相同实现。本主题的前提是您已经安装了 NumPy 和 OpenCV。

方法:

  • 首先,我们将所需的库加载到Python文件中(NumPy、OpenCV 等)。
  • 仅当没有现有的 CSV 文件(高度、宽度、通道、颜色等)时,才使用列名创建一个空的 CSV 文件。如果文件 data.csv 不存在,则 else 语句将创建一个新文件。
  • 现在我们将使用argparse()函数在命令行中从用户那里获取图像的目录路径。
  • 使用 CV2 查找颜色属性。
  • 我们将使用image.shape函数来找出图像的高度、宽度、通道。
  • 然后我们将计算图像的平均红色,平均蓝色,平均绿色
  • 然后我们将使用writerow()函数将输出写入 csv 文件。

下面是实现:

Python3
# Required Libraries
from os import listdir
from os.path import isfile, join
from pathlib import Path
import numpy
import cv2
import argparse
import numpy
import csv
  
# Check whether the CSV 
# exists or not if not then create one.
my_file = Path("csv/details.csv")
  
if my_file.is_file():
    f = open(my_file, "w+")
    with open('csv/details.csv', 'a', newline='') as file:
        writer = csv.writer(file)
          
        writer.writerow(["S.No.", "Name", "Hieght",
                         "Width", "Channels",
                         "Avg Blue", "Avg Red",
                         "Avg Green"])
    f.close()
    pass
    
else:
    with open('csv/details.csv', 'w', newline = '') as file:
        writer = csv.writer(file)
          
        writer.writerow(["S.No.", "Name", "Hieght",
                         "Width", "Channels",
                         "Avg Blue", "Avg Red",
                         "Avg Green"])
  
# Argparse function to get
# the path of the image directory
ap = argparse.ArgumentParser()
  
ap.add_argument("-i", "--image", 
                required = True, 
                help = "Path to folder")
  
args = vars(ap.parse_args())
  
# Program to find the
# colors and embed in the CSV
mypath = args["image"]
  
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
images = numpy.empty(len(onlyfiles), dtype = object)
  
for n in range(0, len(onlyfiles)):
    
    path = join(mypath,onlyfiles[n])
    images[n] = cv2.imread(join(mypath,onlyfiles[n]),
                           cv2.IMREAD_UNCHANGED)
      
    img = cv2.imread(path)
    h,w,c = img.shape
    print(h, w, c)
      
    avg_color_per_row = numpy.average(img, axis = 0)
    avg_color = numpy.average(avg_color_per_row, axis = 0)
      
    with open('csv/details.csv', 'a', newline = '') as file:
        writer = csv.writer(file)
        writer.writerow([n+1, onlyfiles[n], h, w, c, 
                         avg_color[0], avg_color[1],
                         avg_color[2]])
        file.close()


输出:

用法:

  • 保存这个代号为main.py的文件。
  • Shift(Key) + 右键单击并单击此处打开PowerShell窗口。
python3 main.py --image /path/to/images/folder/:

CSV 文件输出:

生成的 CSV 文件