一、场景描述
对一个文件夹下的所有图片进行左右水平翻转,并将翻转后的图片保存新创建的文件中
二、功能实现
(1)Python方式
import os
import cv2 as cv
from PIL import Image
dir_path = input("请输入要处理文件的路径: ").replace("\\", "/")
new_dir_path = input("请输入要保存文件的路径: ").replace("\\", "/")
if not os.path.exists(new_dir_path):
os.makedirs(new_dir_path)
for filename in os.listdir(dir_path):
if filename.endswith(".jpg") or filename.endswith(".bmp"):
# 读取原始图片
img = cv.imread(os.path.join(dir_path, filename))
# 对图片进行左右翻转
flip_img = cv.flip(img, 1)
# 将BGR通道顺序转换为RGB
flip_img = cv.cvtColor(flip_img, cv.COLOR_BGR2RGB)
# 将numpy数组转换为Image对象
pil_img = Image.fromarray(flip_img)
# 保存图片
new_filename = filename.split(".")[0] "_flip." filename.split(".")[-1]
pil_img.save(os.path.join(new_dir_path, new_filename))
这是一个使用Python实现对一个文件夹下的所有图片进行左右翻转并保存的示例代码。
这段代码使用了os、cv2和PIL库。用户需要输入原始图片所在的文件夹路径和翻转后的图片保存的文件夹路径。文件夹路径可以使用反斜杠\或正斜杠/作为路径分隔符。
(1) 首先使用os.path.exists函数判断保存文件的文件夹是否存在,如果不存在则使用os.makedirs函数创建该文件夹。
(2) 然后使用os.listdir函数遍历文件夹中的所有文件,对于所有以.jpg或.bmp结尾的文件,使用cv2.imread函数读取原始图片,使用cv2.flip函数对图片进行左右翻转,使用cv2.cvtColor函数将BGR通道顺序转换为RGB,使用PIL.Image.fromarray函数将numpy数组转换为Image对象,最后使用Image.save函数保存图片到新文件夹中。文件名的生成使用了filename.split函数来将文件名分割为文件名部分和扩展名部分,然后拼接新的文件名。
(2)C 方式
#include <OpenCV2/opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 设置原始图片所在的文件夹路径和翻转后的图片保存的文件夹路径
string input_folder = "/path/to/input/folder/";
string output_folder = "/path/to/output/folder/";
// 遍历文件夹中的所有图片
vector<String> filenames;
glob(input_folder, filenames);
for (size_t i = 0; i < filenames.size(); i)
{
// 打开原始图片并进行左右翻转
Mat image = imread(filenames[i]);
Mat flipped_image;
flip(image, flipped_image, 1);
// 生成保存翻转后图片的文件名
string filename = filenames[i].substr(input_folder.size());
stringstream ss(fileanme);
string name, ext;
getline(ss, name, ','); // 获取文件名部分
getline(ss, ext); // 获取文件扩展名部分
// 生成保存翻转后图片的文件名
string new_filename = name "_flip." ext;
// 保存翻转后的图片到新文件夹
imwrite(output_folder new_filename, flipped_image);
}
return 0;
}
解释一下代码:
(1)我们需要导入OpenCV库和iostream库和string库。
(2)我们使用getline函数从终端输入原始图片所在的文件夹路径和翻转后的图片保存的文件夹路径。
(3)我们使用glob函数遍历文件夹中的所有文件。
(4)对于每个文件,我们使用imread函数打开原始图片并进行左右翻转。我们使用flip函数来进行左右翻转。第三个参数为1表示左右翻转,0表示上下翻转。
(5)然后,我们生成保存翻转后图片的文件名,即在原文件名后缀前面加上"_flip"。
(6)最后,我们使用imwrite函数将翻转后的图片保存到新文件夹中。
需要注意的是,这个代码示例中没有进行错误处理和路径检查。在实际使用时,需要添加相应的错误处理和路径检查,以避免因无效路径或其他错误而导致程序崩溃。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved