批量将图像转为BGR图片代码
时间: 2023-10-08 16:10:16 浏览: 87
如果你想要批量将多张图像转换为BGR格式的图像,可以使用以下代码:
```python
import cv2
import os
# 待转换图像所在目录
input_dir = 'input_images/'
# 转换后的图像保存目录
output_dir = 'output_images/'
# 创建输出目录(如果不存在)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历待转换图像目录中的所有图像文件
for filename in os.listdir(input_dir):
# 读取原始图像
img = cv2.imread(os.path.join(input_dir, filename))
# 将图像转换为BGR格式
bgr_img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 保存转换后的图像
cv2.imwrite(os.path.join(output_dir, filename), bgr_img)
```
在上面的代码中,`input_dir`变量指定待转换图像所在的目录,`output_dir`变量指定转换后的图像保存的目录。首先,使用`os.makedirs`函数创建输出目录(如果不存在)。然后,使用`os.listdir`函数遍历待转换图像目录中的所有图像文件,对每张图像执行转换操作,并使用`cv2.imwrite`函数保存转换后的图像到输出目录中。
相关问题
使用python 将我输入的骨架图片里的骨架进行曲线拟合 批量图片输入和批量图片输出
这个任务需要使用图像处理和曲线拟合的相关库,下面是一个可能的实现思路:
1. 使用OpenCV库读取图片,并将其转化为灰度图像。
2. 使用Canny边缘检测算法提取骨架边缘。
3. 使用Hough变换或其他直线检测算法检测骨架中的直线段,将其转化为线段的起点和终点坐标。
4. 使用scipy库中的curve_fit函数对每个线段进行曲线拟合,得到一条曲线的方程。
5. 将拟合后的曲线绘制在原图上,并使用OpenCV库保存输出图片。
以下是一份示例代码,其中使用了OpenCV和scipy库:
```python
import cv2
import numpy as np
from scipy.optimize import curve_fit
import os
# 定义曲线拟合的函数
def curve_func(x, a, b, c, d):
return a * x ** 3 + b * x ** 2 + c * x + d
# 定义批量处理函数
def process_images(input_dir, output_dir):
# 遍历输入目录下的所有图片
for filename in os.listdir(input_dir):
if filename.endswith('.jpg') or filename.endswith('.png'):
# 读取图片并转为灰度图像
img = cv2.imread(os.path.join(input_dir, filename))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Canny算法提取边缘
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 使用Hough变换检测直线段
lines = cv2.HoughLinesP(edges, rho=1, theta=np.pi/180, threshold=100, minLineLength=20, maxLineGap=5)
# 对每个直线段进行曲线拟合并绘制在原图上
for line in lines:
x1, y1, x2, y2 = line[0]
x = np.linspace(x1, x2, 100)
y = np.linspace(y1, y2, 100)
popt, _ = curve_fit(curve_func, x, y)
a, b, c, d = popt
curve_x = np.linspace(x1, x2, 100)
curve_y = curve_func(curve_x, a, b, c, d)
for i in range(100):
cv2.circle(img, (int(curve_x[i]), int(curve_y[i])), 1, (0, 255, 0), -1)
# 保存输出图片
cv2.imwrite(os.path.join(output_dir, filename), img)
# 执行批量处理
process_images('input_dir', 'output_dir')
```
需要注意的是,该实现只能拟合一次曲线,如果骨架中存在多条曲线,则需要进行进一步的处理。
用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` 为你实际的文件夹路径。
阅读全文