如何使用 Excel 电子表格中的 x/y/r 像素坐标裁剪 Python 中的多个图像?

How to I crop multiple images in Python using x/y/r pixel coordinates in an Excel spreadsheet?

我正在 python 中进行一些图像处理,需要在数千张图像中裁剪多个区域。用于裁剪 ROI(感兴趣区域)的像素坐标数据位于 Excel 电子表格中,并在 ONE[= 内排列为 THREE 逗号分隔值29=] 列。从这个 example data 中可以看出,在 每个 图像中有多个 ROI 需要裁剪。

该列的三个像素坐标值显示为[x,y,r],"x/y"坐标值表示方形 ROI 的左上角 ,"r" 值代表四个边中每一个的 长度 as seen here 。显然,在框的每个角没有多个 x/y 值的情况下找到 ROI 的方法是:"ROI = im[Y:Y+R, X:X+R]",但是我很难达到这个阶段。

我已经使用 pandas.read_excel 函数读取了电子表格,但我很难继续阅读吗?有人可以帮忙吗?

谢谢,罗德

你可以这样做:

#!/usr/bin/env python3

import re
import cv2
import numpy as np
import pandas as pd

# Open spreadsheet
excel_file = 'spreadsheet.xlsx'
ss = pd.read_excel(excel_file)

# Extract filenames and coordinates
FandC = []
for index,row in ss.head().iterrows():
   filename = row['filename']
   coords   = row['Pixel coords']
   # Use regex to find anything that looks like a bunch of digits possibly with decimal point
   x, y, r = re.findall(r'[0-9.]+',coords)
   print(f'DEBUG: filename={filename}, x={x}, y={y}, r={r}')
   FandC.append({'filename': filename, 'x':x, 'y':y, 'r':r})

您现在在 FandC 中有一个文件名和坐标列表,如下所示:

DEBUG: filename=M116_13331848_13109013315679.jpg, x=1345.83, y=1738, r=44.26
DEBUG: filename=M116_13331848_13109013315679.jpg, x=776.33, y=698.17, r=65.72
DEBUG: filename=M116_13331848_13109013315679.jpg, x=1215.5, y=485.67, r=61.16
DEBUG: filename=M116_13331848_13109013315679.jpg, x=1439.33, y=502.67, r=64.73
DEBUG: filename=M116_13331848_13109013315679.jpg, x=793.33, y=1661.5, r=86.03