我有一个应用程序,我裁剪图像的一部分,并使用Python将它们保存在opencv4中,在保存之前首先绘制矩形(下面是ssce)。有些图像非常大,所以在选择要裁剪的区域之前放大它们是很有帮助的。在
问题是,一旦你缩放了一个图像,鼠标光标就会永久地切换到交互式手上。然后单击/拖动只用于在窗口中转换图像的位置(除非我返回到全尺寸,但是我不能在放大的图像上绘制矩形)。在
所以我的问题是,一旦我放大,我如何从中得到:
回到这里:
这样我就可以在放大的图像上画矩形了?我很乐意右键单击返回指针(一些神奇的cv2.EVENT_RBUTTONDOWN
),但也许有一些内置的方法我只是不知道?在
有一点是可行的,当我改变我的程序,使它是右按钮按下/释放绘制矩形,这样就不再有任何干扰本地左键单击导航。问题是我有箭的时候比有手的时候能画出更精确的矩形。所以,虽然这是一个我可以用来解决的方法,但如果我可以切换回箭头来绘制矩形,而放大。在
SSCE
import cv2
import numpy as np
#Insert your path to file here:
input_path = r'C:/image0000.bmp'
image = cv2.imread(input_path, cv2.IMREAD_GRAYSCALE)
(im_h, im_w) = image.shape
max_d = np.max([im_h, im_w])
line_width = int(np.ceil(max_d/1000))
image_to_show = image.copy() # np.copy(image)
mouse_pressed = False
s_x = s_y = e_x = e_y = -1
def mouse_callback(event, x, y, flags, param):
global image_to_show, s_x, s_y, e_x, e_y, mouse_pressed
if event == cv2.EVENT_LBUTTONDOWN:
mouse_pressed = True
s_x, s_y = x, y
image_to_show = np.copy(image)
elif event == cv2.EVENT_MOUSEMOVE:
if mouse_pressed:
image_to_show = np.copy(image)
cv2.rectangle(image_to_show, (s_x, s_y),
(x, y), (255, 255, 255), line_width)
elif event == cv2.EVENT_LBUTTONUP:
mouse_pressed = False
e_x, e_y = x, y
print(s_x, s_y, e_x, e_y)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.setMouseCallback('image', mouse_callback)
while True:
cv2.imshow('image', image_to_show)
k = cv2.waitKey(1)
if k == 27:
break
cv2.destroyAllWindows()
目前没有回答
相关问题 更多 >
编程相关推荐