opencv这个滚轮放大图片和缩小,我希望他是在一个固定的窗口内运作的
时间: 2024-03-09 21:44:36 浏览: 220
要实现在固定窗口内运作的鼠标滚轮图片放大和缩小功能,可以在创建窗口时指定窗口的大小,然后在回调函数中判断鼠标位置是否在窗口内。以下是示例代码:
```python
import cv2
# 定义回调函数
def on_mouse(event, x, y, flags, param):
global img
if event == cv2.EVENT_MOUSEWHEEL:
# 判断鼠标位置是否在窗口内
if x >= 0 and x < img.shape[1] and y >= 0 and y < img.shape[0]:
# 进行图片缩放
if flags > 0:
# 鼠标向上滚动,图片放大
zoom_scale = 1.1
else:
# 鼠标向下滚动,图片缩小
zoom_scale = 0.9
# 获取当前鼠标位置
x_, y_ = x, y
# 对图片进行缩放
h, w = img.shape[:2]
x = int((x - w / 2) * zoom_scale + w / 2)
y = int((y - h / 2) * zoom_scale + h / 2)
M = cv2.getRotationMatrix2D((x_, y_), 0, zoom_scale)
img = cv2.warpAffine(img, M, (w, h))
# 显示缩放后的图片
cv2.imshow("image", img)
# 加载图片
img = cv2.imread("test.jpg")
# 创建窗口并显示图片
cv2.namedWindow("image", cv2.WINDOW_NORMAL)
cv2.resizeWindow("image", 800, 600) # 指定窗口大小
cv2.imshow("image", img)
# 注册鼠标回调函数
cv2.setMouseCallback("image", on_mouse)
# 等待按键事件
cv2.waitKey(0)
# 关闭窗口
cv2.destroyAllWindows()
```
在回调函数中,首先判断鼠标位置是否在窗口内,如果是,则进行图片缩放操作。同时,在创建窗口时,使用`cv2.WINDOW_NORMAL`指定窗口可以手动调整大小,再使用`cv2.resizeWindow`指定窗口的大小。这样就可以实现在固定窗口内运作的鼠标滚轮图片放大和缩小功能了。
阅读全文