【问题标题】:resizing image by mouse dragging using opencv python使用opencv python通过鼠标拖动调整图像大小
【发布时间】:2018-05-12 12:32:37
【问题描述】:

我是 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 中的其他库来完成。谢谢!

【问题讨论】:

  • 您可以改用鼠标滚轮事件。将其值传递给 cv2.resize 中的 fx 和 fy
  • @JeruLuke 您能否详细说明一下鼠标滚轮事件。我试图看看鼠标滚轮输出给出了什么。但是不明白要传递哪个值!!!
  • @JeruLuke 你能检查我下面给出的答案吗?我重写了代码并使用了跟踪栏而不是鼠标事件。请检查我的代码有一些问题

标签: python opencv


【解决方案1】:

我部分完成了调整图像大小的代码,但它不能正常工作,出现了一些主窗口大小问题。如果你重新运行代码,你会得到它。我也看不到完整的窗口和跟踪栏

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_AREA 时,它会出错..没有任何反应,并且跟踪栏消失了。

【讨论】:

  • 函数BnC_control()内的第一行替换为alpha = alpha/10.0。它需要一个float 值才能运行。
  • @JeruLuke 好吧,即使没有将其转换为浮动也可以。但是为什么我的窗口随着图像一起调整大小。我的意思是只有图像需要调整大小。不是吗?
  • 显然,当您的图像调整大小时,您的窗口也会随之调整!由于您提到了cv2.WINDOW_AUTOSIZE,它会调整窗口大小以适合图像。
  • 你已经达到了你想要的!
  • @JeruLuke 是的,它的工作原理。但部分。主窗口也随着图像调整大小。现在我正在尝试制作画布并在其上显示。
【解决方案2】:

显示用于调整图像大小的轨迹栏的简单代码。详情请见this link

import cv2
import numpy as np

# method to be called by trackbar event
def onChange(pos):
    global img,dst,rows,cols

    # get value from trackbar
    value = cv2.getTrackbarPos("resize_trackbar", "Result")

    # resize image
    dst = cv2.resize(src=img, dsize=(cols+value,rows+value))

#Run Main
if __name__ == "__main__" :

    img = cv2.imread("image.jpg", -1)

    # get original image size
    rows,cols = img.shape[:2]

    # initialize dst image
    dst = np.copy(img)

    # create display window
    cv2.namedWindow("Result", cv2.WINDOW_NORMAL)

    # create trackbar
    cv2.createTrackbar("resize_trackbar", "Result", 0, 50, onChange)

    while True:
        cv2.imshow("Result", dst)
        key = cv2.waitKey(1)
        if key == ord('q'):
            break

    cv2.destroyAllWindows()

【讨论】:

  • 我试过你的代码,但它不起作用。当我移动跟踪栏时,图像只是在闪烁。
  • @NiranjanKulkarni 用小图试试吧。
  • 同样的事情正在发生图像是像素现在正在闪烁!
  • 请检查我的修改后的代码,它正在工作,但出现了一些窗口大小调整问题。我已经在下面发布了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2013-05-31
  • 2011-08-06
  • 2020-01-15
  • 2014-07-15
  • 1970-01-01
相关资源
最近更新 更多