使用opencv python通过鼠标拖动调整图像大小

使用opencv python通过鼠标拖动调整图像大小,python,opencv,Python,Opencv,我是python和计算机视觉编程新手。虽然我正在尝试制作一个图像大小调整工具。为此,我使用python3.x和opencv2。 到目前为止,我可以通过以下代码调整图像大小,这只是一个示例 my_img = cv2.imread('4.1.04.tiff') resized_img = cv2.resize(my_img,None,fx=0.5, fy=0.5, interpolation = cv2.INTER_CUBIC) cv2.imshow('Image',resized_img) cv

我是python和计算机视觉编程新手。虽然我正在尝试制作一个图像大小调整工具。为此,我使用python3.x和opencv2。 到目前为止,我可以通过以下代码调整图像大小,这只是一个示例

my_img = cv2.imread('4.1.04.tiff')
resized_img = cv2.resize(my_img,None,fx=0.5, fy=0.5, interpolation = 
cv2.INTER_CUBIC)
cv2.imshow('Image',resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
嗯,我的问题是我不知道如何通过拖动鼠标来调整图像的大小。
请让我知道它是否可以在opencv中实现,是否可以使用python中的其他库实现。谢谢

显示用于调整图像大小的轨迹栏的简单代码。有关详细信息,请参见


我已经部分完成了调整图像大小的代码,但它并没有很好地工作,出现了一些主窗口大小问题。如果你重新运行代码,你会得到它。我也看不到完整的窗口和跟踪器栏

import cv2
#import numpy as np

pro_img = None
a1 = 0.5 #for default size of image

def nothing(x):
    pass

def BnC_control(alpha):
    alpha = alpha/10
    #print(type(alpha))
    if alpha >= 0.1:
        return alpha
    else: 
        return 0.1


img = cv2.imread('watch.jpg')
#img = np.zeros((512,512,3),np.uint16)
cv2.namedWindow('Window1',cv2.WINDOW_AUTOSIZE)
cv2.createTrackbar('Alpha','Window1',1,10,nothing)



while(True):
    #r = BnC_control(a)
    #pro_img = cv2.resize(img,None,fx=0.3,fy=0.3)
    a = cv2.getTrackbarPos('Alpha','Window1')
    a1 = BnC_control(a)
    #print(a1)
    re_img = cv2.resize(img,None,fx=a1,fy=a1,interpolation = cv2.INTER_CUBIC)
    cv2.imshow('Window1',re_img)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

另外,当我将插值更改为INTER_区域时,它会出错。什么也不会发生,跟踪器也会消失。

您可以使用鼠标滚轮事件来代替。将其值传递给cv2中的fx和fy。resize@JeruLuke你能详细说明一下吗,关于鼠标滚轮事件。我试着看看鼠标滚轮的输出结果。但我不知道该传递哪个值@JeruLuke你能检查我下面给出的答案吗。我重写了代码,并使用跟踪条代替鼠标事件。请检查我的代码。itI中存在一些问题。我尝试了你的代码,但它不起作用。当我移动跟踪条时,图像只是在闪烁。@NiranjanKulkarni用一个小图像试试。同样的事情发生了,图像的像素现在正在闪烁!!请检查我的修订代码,它正在工作,但一些窗口大小的问题正在发生。我已经在下面发布了我的答案。在函数
BnC_control()
中,将第一行替换为
alpha=alpha/10.0
。它需要一个
float
值才能运行。@JeruLuke很好,即使没有将其转换为float也能正常工作。但为什么我的窗口会随着图像一起调整大小呢。我的意思是,只有图像需要调整大小。是吗?显然,当你的图像调整大小时,你的窗口也会调整大小!既然您提到了
cv2.WINDOW\u AUTOSIZE
它会调整窗口大小以适应图像。您已经实现了您想要的@杰鲁鲁克:是的,它起作用了。但是部分。主窗口还可以使用图像调整大小。现在我正在尝试制作画布并在其上显示。
import cv2
#import numpy as np

pro_img = None
a1 = 0.5 #for default size of image

def nothing(x):
    pass

def BnC_control(alpha):
    alpha = alpha/10
    #print(type(alpha))
    if alpha >= 0.1:
        return alpha
    else: 
        return 0.1


img = cv2.imread('watch.jpg')
#img = np.zeros((512,512,3),np.uint16)
cv2.namedWindow('Window1',cv2.WINDOW_AUTOSIZE)
cv2.createTrackbar('Alpha','Window1',1,10,nothing)



while(True):
    #r = BnC_control(a)
    #pro_img = cv2.resize(img,None,fx=0.3,fy=0.3)
    a = cv2.getTrackbarPos('Alpha','Window1')
    a1 = BnC_control(a)
    #print(a1)
    re_img = cv2.resize(img,None,fx=a1,fy=a1,interpolation = cv2.INTER_CUBIC)
    cv2.imshow('Window1',re_img)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()