python - 裁剪和存储图像集合的边界框图像区域?
问题描述
当前代码旨在为文件夹中的一组图像裁剪和存储多个边界框图像区域。裁剪的边界框图像区域存储到不同的文件夹。一共有100张图片,每张图片有多个bounding box。CSV 文件包含每个给定图像的多个边界框坐标。代码如图所示:
import pandas as pd
import cv2
import numpy as np
import glob
import os
filenames = glob.glob("folder/abnormal/*.png")
filenames.sort()
images = [cv2.imread(img) for img in filenames]
print(images)
df = pd.read_csv('abnormal.csv')
for img in images:
for i in range(len(df)):
name = df.loc[i]['patientId']
start_point = (df.loc[i]['x_dis'],df.loc[i]['y_dis'])
end_point = (df.loc[i]['x_dis']+df.loc[i]['width_dis'],df.loc[i]['y_dis']+df.loc[i]['height_dis'])
crop = img[df.loc[i]['y_dis']:df.loc[i]['y_dis']+df.loc[i]['height_dis'],
df.loc[i]['x_dis']:df.loc[i]['x_dis']+df.loc[i]['width_dis']]
cv2.imwrite("abnormal/crop_{0}.png".format(i), crop)
在运行上面的代码时,循环无限期地继续。发生这种情况时,所有裁剪都相对于 image1 的边界框图像区域,然后所有存储的裁剪都相对于 image2 的边界框图像区域进行转换,依此类推。需要的是每个图像的多个框区域,并裁剪和存储一次。图像以名称 Patient*.png (patient1.png) 或 Patient*.*.png (patient1_1.png) 开头。
解决方案
以下代码片段应该可以完成这项工作:
filenames = glob.glob("folder/abnormal/*.png")
filenames.sort()
df = pd.read_csv('abnormal.csv')
im_csv_np = df.loc[:,"patientId"].values
for f in filenames:
img = cv2.imread(f)
img_name = f.split(os.sep)[-1]
idx = np.where(im_csv_np == img_name)
if idx[0].shape[0]: # if there is a match shape[0] should 1, if not 0
for i in idx:
name = df.loc[i]['patientId']
start_point = (df.loc[i]['x_dis'],df.loc[i]['y_dis'])
end_point = (df.loc[i]['x_dis']+df.loc[i]['width_dis'],df.loc[i]['y_dis']+df.loc[i]['height_dis'])
crop = img[df.loc[i]['y_dis']:df.loc[i]['y_dis']+df.loc[i]['height_dis'],
df.loc[i]['x_dis']:df.loc[i]['x_dis']+df.loc[i]['width_dis']]
cv2.imwrite("abnormal/crop_{0}.png".format(i), crop)
推荐阅读
- javascript - 为什么 React 中 useEffect 钩子中的 setInterval 一直在运行?
- bash - Ubuntu 命令行 从转换后的 excel 文件中提取零件编号和数量
- c# - WinUI 3.0 桌面:文本框的背景颜色在鼠标悬停时更改
- java - 如何通过扫描类路径而不是手动指定要自动装配的类来使用 spring 和 junit 进行集成测试?
- python - 在三个字符串列表中搜索元素的 Python 函数
- javascript - Uncaught (in promise) ReferenceError: axios is not defined
- python - 如何将顶点前驱数据框转换为路径?
- performance - 为什么 IR 的大小不同,但可执行文件的大小却相同?以及如何通过静态分析比较性能?
- javascript - 将文本更改为隐藏和显示的按钮
- charts - 如何使用 HighCharts 网络图表实现这一点