[英]Cropping and storing bounding box image regions for a collection of images?
當前代碼旨在為文件夾中的一組圖像裁剪和存儲多個邊界框圖像區域。 裁剪的邊界框圖像區域存儲到不同的文件夾中。 一共有100張圖片,每張圖片都有多個邊界框。 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.