Python使用OpenCV转换图像大小
作者:Tech Synapse
在Python中,使用OpenCV库来转换图像大小是一个常见的操作,它可以帮助你调整图像到特定的尺寸,以适应不同的应用场景,比如图像预处理、模型输入等。下面是一个详细的代码示例,展示了如何使用OpenCV来转换图像的大小。
首先,确保你已经安装了OpenCV库。如果还没有安装,可以通过pip安装:
pip install opencv-python
接下来,是一个完整的Python脚本,它加载一个图像文件,将其大小转换为指定的宽度和高度,然后显示并保存转换后的图像。
import cv2 def resize_image(input_image_path, output_image_path, width=None, height=None, inter=cv2.INTER_AREA): """ 调整图像大小 :param input_image_path: 输入图像的路径 :param output_image_path: 输出图像的路径 :param width: 目标宽度,如果为None,则不改变宽度 :param height: 目标高度,如果为None,则不改变高度 :param inter: 插值方法,默认为cv2.INTER_AREA(适用于缩小图像) :return: None """ # 读取图像 image = cv2.imread(input_image_path) if image is None: print(f"Error: Unable to load image at {input_image_path}") return # 检查是否指定了宽度和高度 if width is None and height is None: print("Error: Both width and height cannot be None.") return # 如果只指定了宽度或高度,则计算另一个维度以保持图像的宽高比 if width is None: width = int(image.shape[1] * (height / float(image.shape[0]))) elif height is None: height = int(image.shape[0] * (width / float(image.shape[1]))) # 调整图像大小 resized_image = cv2.resize(image, (width, height), interpolation=inter) # 显示图像(可选) cv2.imshow('Resized Image', resized_image) cv2.waitKey(0) # 等待按键 cv2.destroyAllWindows() # 保存图像 cv2.imwrite(output_image_path, resized_image) # 使用示例 input_image = 'path_to_your_image.jpg' # 替换为你的图像路径 output_image = 'resized_image.jpg' resize_image(input_image, output_image, width=640, height=480)
在这个示例中,resize_image函数接受输入图像的路径、输出图像的路径、目标宽度、目标高度以及插值方法作为参数。它首先读取图像,然后检查是否指定了宽度和高度。如果只指定了其中一个,则根据原始图像的宽高比计算另一个维度。之后,使用cv2.resize函数调整图像大小,并通过cv2.imshow显示图像(这是可选的,主要用于调试),最后使用cv2.imwrite保存调整大小后的图像。
请确保将'path_to_your_image.jpg'替换为你自己的图像文件路径,并根据需要调整目标宽度和高度。
这里我会提供一个稍微不同的例子,这次我们将专注于只指定宽度或高度中的一个参数,让OpenCV自动根据原始图像的宽高比计算另一个维度,以确保图像不会失真。
import cv2 def resize_image_keep_aspect_ratio(input_image_path, output_image_path, max_width=None, max_height=None, inter=cv2.INTER_AREA): """ 调整图像大小,同时保持宽高比 :param input_image_path: 输入图像的路径 :param output_image_path: 输出图像的路径 :param max_width: 最大宽度,如果为None,则不限制宽度 :param max_height: 最大高度,如果为None,则不限制高度 :param inter: 插值方法,默认为cv2.INTER_AREA(适用于缩小图像) :return: None """ # 读取图像 image = cv2.imread(input_image_path) if image is None: print(f"Error: Unable to load image at {input_image_path}") return # 获取原始图像的宽高 height, width = image.shape[:2] # 计算新的尺寸 if max_width is None and max_height is None: print("Error: Both max_width and max_height cannot be None.") return elif max_width is None: max_width = int(width * (max_height / float(height))) elif max_height is None: max_height = int(height * (max_width / float(width))) else: # 确保宽度和高度不会超过指定的最大值,同时保持宽高比 ratio = min(max_width / width, max_height / height) max_width = int(width * ratio) max_height = int(height * ratio) # 调整图像大小 resized_image = cv2.resize(image, (max_width, max_height), interpolation=inter) # 保存图像 cv2.imwrite(output_image_path, resized_image) # 可选:显示图像(注意,在生产环境中通常不会这样做) # cv2.imshow('Resized Image with Aspect Ratio', resized_image) # cv2.waitKey(0) # cv2.destroyAllWindows() # 使用示例 input_image = 'your_image.jpg' # 替换为你的图像文件路径 output_image = 'resized_image_with_aspect_ratio.jpg' resize_image_keep_aspect_ratio(input_image, output_image, max_width=800) # 只指定最大宽度 # 或者 # resize_image_keep_aspect_ratio(input_image, output_image, max_height=600) # 只指定最大高度
在这个例子中,resize_image_keep_aspect_ratio 函数允许你通过指定最大宽度或最大高度来调整图像大小,同时保持图像的原始宽高比。如果同时指定了最大宽度和最大高度,函数将计算一个缩放比例,该比例是两者中较小的那个,以确保图像不会超过这两个限制中的任何一个。
请记得将 'your_image.jpg' 替换为你自己的图像文件路径,并根据需要调整 max_width 或 max_height 参数。如果你想要查看调整大小后的图像,可以取消注释与 cv2.imshow 相关的代码行。但在实际的生产环境中,通常不会这样做,因为 cv2.imshow 需要一个GUI环境来显示图像。
以上就是Python使用OpenCV转换图像大小的详细内容,更多关于Python OpenCV图像大小的资料请关注脚本之家其它相关文章!