>1 当你使用cv2.imshow加载分辨率大于电脑自身的时候,图像只会在显示窗口上展示一部分,因此必须使用resize功能,对图片进行宽高等比缩放,并将最终的缩放图像进行保存。
>2 但该功能有个缺点就是imshow窗口也会跟着移动,并且图片是以(0,0)点进行缩放,缩放后的图像和窗口是粘黏的。
import cv2
import numpy as np
# 初始化缩放比例
scale = 1.0
# 鼠标滚动事件回调函数
def on_mouse_wheel(event, x, y, flags, param):
global scale
if event == cv2.EVENT_LBUTTONDOWN:
scale = 1.0
if event == cv2.EVENT_MOUSEWHEEL:
# 检查滚轮是向上滚动还是向下滚动
if flags > 0: # 向上滚动
scale *= 1.1 # 放大
else: # 向下滚动
scale *= 0.9 # 缩小
scale = max(0.1, min(2.0, scale)) # 限制缩放比例在 0.1 到 2.0 之间
# 读取图像
image = cv2.imread('original.png') # 替换为你的图像路径
if image is None:
print("Error: Image not found.")
exit()
# 创建窗口
cv2.namedWindow('Image Zoom')
# 设置鼠标回调函数
cv2.setMouseCallback('Image Zoom', on_mouse_wheel)
while True:
# 显示缩放后的图像
resized_image = cv2.resize(image, None, fx=scale, fy=scale, interpolation=cv2.INTER_LINEAR)
# cv2.namedWindow('Image Zoom', flags=cv2.WINDOW_NORMAL)
cv2.imshow('Image Zoom', resized_image)
# cv2.imwrite("Image Zoom.png", resized_image)
# 按 'q' 退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
print(f"Final scale: {scale}")
cv2.destroyAllWindows()