好的,我们来分析一下这段代码。
这段代码从一个输入文件夹中读取图像文件,并对每个图像进行处理。如果图像的文件名以 `.jpg` 或 `.png` 结尾,它会读取图像、调整图像大小、应用高斯模糊,并显示原始图像和处理后的图像。
具体步骤如下:
1. **遍历文件夹中的文件**:
for filename in os.listdir(input_folder):
这行代码遍历 `input_folder` 中的所有文件。
2. **检查文件后缀名**:
if filename.endswith('.jpg') or filename.endswith('.png'):
这行代码检查文件是否以 `.jpg` 或 `.png` 结尾。
3. **构造图像路径**:
img_path = os.path.join(input_folder, filename)
这行代码构造图像文件的完整路径。
4. **读取图像**:
img = cv2.imread(img_path) # 读取图像文件
这行代码使用 OpenCV 的 `cv2.imread` 函数读取图像文件。
5. **检查图像是否成功读取**:
if img is None:
print(f"Error: Could not read image {filename}.")
如果图像读取失败,打印错误信息。
6. **处理图像**:
else:
img_src = cv2.imread(img_path)
img = cv2.resize(src=img_src, dsize=(450, 450))
img = cv2.GaussianBlur(src=img, ksize=(5, 5), sigmaX=0, sigmaY=1.0)
- 读取原始图像。
- 使用 `cv2.resize` 函数将图像调整为 450x450 像素。
- 使用 `cv2.GaussianBlur` 函数对图像应用高斯模糊。
7. **显示图像**:
cv2.imshow('img_src', img_src)
cv2.waitKey(0)
cv2.destroyAllWindows()
这几行代码显示原始图像,并在按下任意键后关闭显示窗口。
不过有几个需要注意的地方:
1. 你读取了两次图像(`img` 和 `img_src`),其实只需要一次。
2. 你没有保存处理后的图像到输出文件夹。
修改后的代码如下:
import os
import cv2
input_folder = 'C:\\Users\\shiro\\Desktop\\digital image\\1.gray level picture\\import' # 替换为你的输入文件夹路径
output_folder = 'C:\\Users\\shiro\\Desktop\\digital image\\1.gray level picture\\output' # 替换为你的输出文件夹路径
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.endswith('.jpg') or filename.endswith('.png'):
img_path = os.path.join(input_folder, filename)
img = cv2.imread(img_path) # 读取图像文件
if img is None:
print(f"Error: Could not read image {filename}.")
else:
img = cv2.resize(src=img, dsize=(450, 450))
img = cv2.GaussianBlur(src=img, ksize=(5, 5), sigmaX=0, sigmaY=1.0)
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, img) # 保存处理后的图像
# 显示处理后的图像(可选)
cv2.imshow('Processed Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("All images have been processed.")
这样,处理后的图像会被保存到输出文件夹中,同时也会在窗口中显示出来。如果不需要显示,可以去掉 `cv2.imshow`、`cv2.waitKey` 和 `cv2.destroyAllWindows` 相关代码。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |