def img_cut_roi_resize_to_target_black(img_txt_path,result_path): img_total = [] txt_total = [] file = os.listdir(img_txt_path) for filename in file: first, last = os.path.splitext(filename) if last == ".bmp": # 图片的后缀名 img_total.append(first) # print(img_total) else: txt_total.append(first) for img_ in img_total: if img_ in txt_total: filename_img = img_ + ".bmp" # 图片的后缀名 # print('filename_img:', filename_img) path1 = os.path.join(img_txt_path, filename_img) img = cv2.imread(path1) h, w = img.shape[0], img.shape[1] # 直接读取原图的长宽不会失真 img = cv2.resize(img, (w, h), interpolation=cv2.INTER_CUBIC) # resize 图像大小,否则roi区域可能会报错 # plt.imshow('resized_img',img) # 会报错,之后再次查看resize后的图片(已解决) # plt.show() filename_txt = img_ + ".txt" # print('filename_txt:', filename_txt) n = 1 with open(os.path.join(img_txt_path, filename_txt), "r+", encoding="utf-8", errors="ignore") as f: for line in f: aa = line.split(" ") x_center = w * float(aa[1]) # aa[1]左上点的x坐标 y_center = h * float(aa[2]) # aa[2]左上点的y坐标 width = int(w * float(aa[3])) # aa[3]图片width height = int(h * float(aa[4])) # aa[4]图片height lefttopx = int(x_center - width / 2.0) lefttopy = int(y_center - height / 2.0) # roi = img[lefttopy+1:lefttopy+height+3,lefttopx+1:lefttopx+width+1] # [左上y:右下y,左上x:右下x] (y1:y2,x1:x2)需要调参,否则裁剪出来的小图可能不太好 roi = img[lefttopy:lefttopy + height, lefttopx:lefttopx + width] # 目前没有看出差距 roi = img_resize_to_target_black(roi) # roi = cv2.copyMakeBorder(roi, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=[255, 255, 255]) # 是将原图长宽各个
时间: 2023-12-11 21:04:50 浏览: 25
方向上添加50个像素的白边,但是这里注释掉了,可能是因为不需要这个步骤了。接下来,将裁剪好并调整大小的图片保存到指定路径中:
```python
# 保存裁剪好的图片到指定路径
cv2.imwrite(os.path.join(result_path, img_ + "_" + str(n) + ".bmp"), roi)
n += 1
```
最后,该函数返回一个空值。
相关问题
图像处理创建dataset,img_path,label的代码
以下是一个简单的图像处理代码示例,用于创建数据集,其中包括图像路径和标签:
```python
import os
import cv2
import numpy as np
# 图像文件夹路径和标签
data_dir = 'path/to/image/folder'
labels = ['cat', 'dog']
# 创建数据集
dataset = []
for label in labels:
label_path = os.path.join(data_dir, label)
for img_name in os.listdir(label_path):
img_path = os.path.join(label_path, img_name)
img = cv2.imread(img_path)
img = cv2.resize(img, (224, 224)) # 调整图像大小
img = np.array(img, dtype=np.float32) / 255.0 # 归一化图像
dataset.append((img, label))
# 打印数据集大小
print('Dataset size:', len(dataset))
# 打印前10个样本
for i in range(10):
print(dataset[i])
```
在这个示例中,我们假设有两个标签:'cat' 和 'dog',并将它们存储在文件夹 'path/to/image/folder' 中。我们遍历每个标签文件夹,读取每个图像并将其调整为大小为 (224, 224) 的图像。然后,我们将图像归一化为值在 0 和 1 之间的浮点数,并将其与标签一起添加到数据集中。
最后,我们打印数据集大小并输出前10个样本。
img_np = np.asarray(img_resize) / 255 # normalize
这行代码是将 PIL 图像对象 img_resize 转换为 NumPy 数组 img_np,并进行了归一化操作。具体来说,np.asarray() 函数将 PIL 图像对象转换为 NumPy 数组,除以 255 的操作是为了将像素值归一化到 0 到 1 的范围内。
在图像处理中,通常需要对像素值进行归一化处理,使其取值范围在 0 到 1 之间,以方便后续的处理操作。归一化操作可以避免像素值过大或过小导致的溢出或精度损失,同时也可以使不同图像之间的像素值具有可比性。
需要注意的是,在进行归一化操作时,需要根据具体的应用场景和需求来选择合适的归一化方法。例如,在深度学习中,通常需要将像素值归一化为均值为 0、方差为 1 的标准正态分布,以便于网络的训练和收敛。