如何在Python中调整输出图像大小及处理模糊检测代码运行问题
嘿,我来帮你搞定这两个问题!
问题1:如何在Python中调整输出图像大小?
在Python里调整图像大小,最常用的就是OpenCV和**Pillow(PIL的分支)**这两个工具,我给你分别拆解具体用法:
方法1:使用OpenCV
OpenCV的cv2.resize()函数灵活度很高,既可以直接指定目标尺寸,也能按比例缩放:
import cv2 # 加载图像 image = cv2.imread("input_image.jpg") # 方式A:直接设置目标宽高(参数顺序是(width, height)) resized_image = cv2.resize(image, (800, 600)) # 方式B:按比例缩放(比如缩小到原尺寸的50%) scale_percent = 50 width = int(image.shape[1] * scale_percent / 100) height = int(image.shape[0] * scale_percent / 100) dim = (width, height) # 缩小用INTER_AREA插值更清晰,放大用INTER_CUBIC/INTER_LINEAR效果更好 resized_image = cv2.resize(image, dim, interpolation=cv2.INTER_AREA) # 保存调整后的图像 cv2.imwrite("resized_image.jpg", resized_image)
方法2:使用Pillow
Pillow的API更直观,适合快速处理:
from PIL import Image # 加载图像 image = Image.open("input_image.jpg") # 方式A:指定目标尺寸 resized_image = image.resize((800, 600)) # 方式B:按比例缩放 width, height = image.size new_width = int(width * 0.5) new_height = int(height * 0.5) resized_image = image.resize((new_width, new_height)) # 保存图像 resized_image.save("resized_image_pillow.jpg")
问题2:关于Python模糊检测代码的常见问题与解决
你用的是基于拉普拉斯方差的经典模糊检测方案,先把你没写完的代码补全,再聊聊容易踩的坑:
完整可运行的代码示例
from imutils import paths import argparse import cv2 def variance_of_laplacian(image): # 计算图像拉普拉斯算子的方差,方差越小图像越模糊 return cv2.Laplacian(image, cv2.CV_64F).var() # 解析命令行参数(如果不需要命令行,直接写死图像路径也可以) ap = argparse.ArgumentParser() ap.add_argument("-i", "--images", required=True, help="图像文件夹路径") ap.add_argument("-t", "--threshold", type=float, default=100.0, help="低于此值的图像会被标记为模糊") args = vars(ap.parse_args()) # 遍历文件夹里的所有图像 for imagePath in paths.list_images(args["images"]): # 加载图像并转为灰度图(必须转灰度,拉普拉斯方差基于灰度图计算) image = cv2.imread(imagePath) if image is None: print(f"无法加载图像:{imagePath}") continue gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) fm = variance_of_laplacian(gray) text = "Not Blurry" # 对比阈值判断是否模糊 if fm < args["threshold"]: text = "Blurry" # 在图像上标注结果(可选,用于可视化) cv2.putText(image, f"{text}: {fm:.2f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3) cv2.imshow("Image", image) key = cv2.waitKey(0) cv2.destroyAllWindows()
常见问题及解决办法
- 报错找不到
imutils库:打开终端运行pip install imutils即可,这是OpenCV的辅助工具库,用来简化图像路径遍历。 - 图像加载失败(
image为None):检查图像文件夹路径是否正确,避免路径里有中文或特殊字符(OpenCV对非ASCII路径支持较差)。 - 模糊判断不准确:默认阈值100不是通用的,你需要用自己的清晰图像样本计算拉普拉斯方差,取一个合适的下限值作为阈值。
- 彩色图像直接传入函数出错:拉普拉斯方差必须基于灰度图计算,代码里的
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)这一步绝对不能省。
内容的提问来源于stack exchange,提问作者Abed Nego Lubis
相关产品推荐
相关产品推荐

