cv::imwrite(filename, resized_image);什么意思
时间: 2024-04-28 07:22:36 浏览: 112
这是一个 C++ OpenCV 库中的函数,用于将图像保存到指定的文件中。其中,filename 是要保存的文件的路径和名称,resized_image 是要保存的图像对象。在这个函数中,会将 resized_image 对象中的图像数据写入到指定的文件中。此外,如果指定的文件已经存在,它会自动覆盖原有的文件。
相关问题
import os import cv2 # 定义原始和更改大小后的文件夹路径 original_folder_path = 'E:\shujuji\Intel Image Classification\seg_train\seg_train/buildings' resized_folder_path = 'E:\shujuji\Intel Image Classification\seg_train\change/buildings' # 如果更改大小后的文件夹不存在,则创建它 if not os.path.exists(resized_folder_path): os.makedirs(resized_folder_path) # 循环遍历原始文件夹中的所有图像文件 for filename in os.listdir(original_folder_path): if filename.endswith('.jpg') or filename.endswith('.png') or filename.endswith('.jpeg'): # 读取原始图像 img = cv2.imread(os.path.join(original_folder_path, filename)) # 将图像大小更改为(224,224,3) img_resized = cv2.resize(img, (224, 224)) # 保存更改大小后的图像到新文件夹中,使用原始文件名 cv2.imwrite(os.path.join(resized_folder_path, filename), img_resized),对这段代码进行更改,使之满足要求
以下是修改后的代码,满足获取文件夹下所有文件夹的所有图片,更改图片的尺寸后生成文件夹,按照原始文件夹进行排布,文件名使用原始文件名的要求:
```python
import os
import cv2
# 定义函数,用于调整图片尺寸
def resize_image(image_path, output_path, new_size):
img = cv2.imread(image_path)
img_resized = cv2.resize(img, new_size)
cv2.imwrite(output_path, img_resized)
# 定义函数,用于获取指定文件夹下所有图片
def get_all_images(folder_path):
images = []
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith('.jpg') or file.endswith('.png') or file.endswith('.jpeg'):
images.append(os.path.join(root, file))
return images
# 定义函数,用于生成新文件夹并存储调整后的图片
def generate_resized_images(source_folder, target_folder, new_size):
# 获取所有图片
images = get_all_images(source_folder)
# 按照原始文件夹进行排布
for image_path in images:
relative_path = os.path.relpath(image_path, source_folder)
output_folder = os.path.join(target_folder, os.path.dirname(relative_path))
os.makedirs(output_folder, exist_ok=True)
output_path = os.path.join(output_folder, os.path.basename(image_path))
# 调整图片尺寸并存储
resize_image(image_path, output_path, new_size)
# 定义原始和更改大小后的文件夹路径
original_folder_path = r'E:\shujuji\Intel Image Classification\seg_train\seg_train\buildings'
resized_folder_path = r'E:\shujuji\Intel Image Classification\seg_train\change\buildings'
# 如果更改大小后的文件夹不存在,则创建它
if not os.path.exists(resized_folder_path):
os.makedirs(resized_folder_path)
# 调用函数,生成新文件夹并存储调整后的图片
new_size = (224, 224) # 调整后的图片尺寸为 224x224
generate_resized_images(original_folder_path, resized_folder_path, new_size)
```
在使用时,需要将代码中的 `original_folder_path` 替换为要处理的原始文件夹的路径,`resized_folder_path` 替换为生成的新文件夹的路径,`new_size` 替换为要调整的图片尺寸。代码会自动获取原始文件夹下所有图片,并按照原始文件夹进行排布,生成新文件夹并存储调整后的图片。新文件夹的文件名使用原始文件名。
用python调用opencv批量裁剪图片为28*28的图片且图片中心不变后图片后批量储存
在Python中使用OpenCV批量裁剪并保存28x28尺寸的图片,保持图片中心位置不变,可以按照以下步骤操作:
1. 导入所需的库:`os`, `cv2` 和 `numpy`。假设你已经安装了PIL( pillow 库)来帮助调整图像大小,因为它提供更方便的方法。
```python
import os
import cv2
from PIL import Image
```
2. 定义一个函数来裁剪和保存图片:
```python
def crop_and_save_images(input_folder, output_folder, img_size=(28, 28)):
for filename in os.listdir(input_folder):
if filename.endswith(".jpg") or filename.endswith(".png"): # 指定只处理常见的图片格式
img_path = os.path.join(input_folder, filename)
try:
original_image = cv2.imread(img_path)
# 获取原图中心点的坐标
center_point = (original_image.shape[1] // 2, original_image.shape[0] // 2)
# 创建一个新的黑色背景的Image对象,大小为img_size
resized_image = Image.new('RGB', img_size, color='black')
# 使用PIL将原图缩小到指定大小,并保持中心点不变
cropped_image = Image.fromarray(original_image).resize(img_size, resample=Image.BILINEAR)
cropped_image = cropped_image.crop(((center_point[0]-img_size[0]//2), (center_point[1]-img_size[1]//2),
(center_point[0]+img_size[0]//2), (center_point[1]+img_size[1]//2)))
# 将裁剪后的图像转为OpenCV格式
resized_image_pil = np.array(resized_image)
resized_image_opencv = cv2.cvtColor(resized_image_pil, cv2.COLOR_RGB2BGR)
# 保存裁剪后的图片到指定的输出目录
save_path = os.path.join(output_folder, filename)
cv2.imwrite(save_path, resized_image_opencv)
except Exception as e:
print(f"Error processing {filename}: {e}")
```
3. 调用这个函数,传入你的输入文件夹和输出文件夹路径:
```python
crop_and_save_images(input_folder="your_input_directory", output_folder="your_output_directory")
```
记得替换上述代码中的 `your_input_directory` 和 `your_output_directory` 为你实际的文件夹路径。
阅读全文