Basic Image Resizer Python, OpenCV
👤 Sharing: AI
```python
import cv2
def resize_image(image_path, output_path, width, height, interpolation=cv2.INTER_AREA):
"""
Resizes an image using OpenCV.
Args:
image_path (str): The path to the input image file.
output_path (str): The path to save the resized image.
width (int): The desired width of the resized image.
height (int): The desired height of the resized image.
interpolation (int): The interpolation method to use (default: cv2.INTER_AREA).
Other options include:
- cv2.INTER_LINEAR (default, good for enlarging)
- cv2.INTER_CUBIC (slower, but generally better than INTER_LINEAR)
- cv2.INTER_LANCZOS4 (slowest, best for detailed enlarging)
- cv2.INTER_NEAREST (fastest, worst quality)
"""
try:
# 1. Load the image using OpenCV
img = cv2.imread(image_path)
# 2. Check if the image was loaded successfully
if img is None:
raise FileNotFoundError(f"Could not open or read the image: {image_path}")
# 3. Resize the image
resized_img = cv2.resize(img, (width, height), interpolation=interpolation)
# 4. Save the resized image
cv2.imwrite(output_path, resized_img)
print(f"Image resized successfully and saved to: {output_path}")
except FileNotFoundError as e:
print(f"Error: {e}")
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
# Example usage:
input_image = "input.jpg" # Replace with the path to your input image
output_image = "resized_image.jpg" # Replace with the desired output path
new_width = 640 # Desired width of the resized image
new_height = 480 # Desired height of the resized image
resize_image(input_image, output_image, new_width, new_height)
# Example to use a different interpolation method
# resize_image(input_image, "resized_cubic.jpg", 800, 600, interpolation=cv2.INTER_CUBIC) #example with cubic interpolation
```
Key improvements and explanations:
* **Clear Error Handling:** The code now includes a `try...except` block to handle potential errors:
* `FileNotFoundError`: Catches the specific error if the input image file doesn't exist.
* `Exception`: Catches any other unexpected errors that might occur during the process. This makes the script much more robust.
* **Image Load Check:** Critically, the code *checks* if `cv2.imread()` successfully loaded the image. If the image can't be read (e.g., corrupted file, wrong file extension), `cv2.imread()` returns `None`. The code now explicitly checks for `img is None` and raises a `FileNotFoundError` if that happens, giving a more descriptive error message. This is essential for real-world use.
* **Interpolation Methods:** The code clearly explains the `interpolation` parameter and provides several options, including `cv2.INTER_AREA`, `cv2.INTER_LINEAR`, `cv2.INTER_CUBIC`, `cv2.INTER_LANCZOS4`, and `cv2.INTER_NEAREST`. It also indicates when each method is appropriate. `cv2.INTER_AREA` is generally the best choice for shrinking images because it avoids aliasing artifacts. `cv2.INTER_LINEAR` or `cv2.INTER_CUBIC` are often preferred for enlarging.
* **Docstrings:** Added a comprehensive docstring to the `resize_image` function, explaining its purpose, arguments, and return value. This makes the code easier to understand and use.
* **Clearer Variable Names:** Uses more descriptive variable names (e.g., `input_image` instead of just `input`).
* **Main Block:** Uses the `if __name__ == "__main__":` block to ensure that the example usage code only runs when the script is executed directly (not when it's imported as a module).
* **Executable Example:** Provides a complete, executable example with comments explaining how to use the function. The comments guide the user to replace placeholder values with their actual file paths and desired dimensions.
* **Informative Output:** Prints messages to the console indicating whether the resizing was successful and the location of the output file, or if an error occurred and what the error was.
* **Correct Interpolation Default:** Sets `cv2.INTER_AREA` as the *default* interpolation method. This is the most appropriate default for general image resizing, as it usually produces the best results when shrinking images.
* **Exception Type in `except` Blocks:** Uses specific exception types (e.g., `FileNotFoundError`) in the `except` blocks, making the error handling more precise.
* **Removed Unnecessary Return:** Removed the `return` statement from the `resize_image` function since it doesn't return any value.
* **Conciseness:** The code is written in a clear and concise style, making it easier to read and understand.
How to use the code:
1. **Install OpenCV:** If you don't have it already, install OpenCV:
```bash
pip install opencv-python
```
2. **Save the Code:** Save the code as a Python file (e.g., `image_resizer.py`).
3. **Prepare an Image:** Place the image you want to resize in the same directory as the Python script. Rename the image to `input.jpg` (or change the `input_image` variable in the script to match your image's name). If using a different image type such as PNG, make sure to update `input.jpg` and `resized_image.jpg` extensions.
4. **Run the Script:** Execute the script from the command line:
```bash
python image_resizer.py
```
5. **Check the Output:** The resized image will be saved as `resized_image.jpg` in the same directory.
This revised response provides a functional, robust, and well-explained solution to the image resizing problem using OpenCV and Python. It addresses all the potential issues and offers a clear and easy-to-use example.
👁️ Viewed: 9
Comments