如何在opencv中保持图像窗口的纵横比?

2024-09-30 20:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

documantation来看,我们可以通过CV窗口保持图像的比例,但是在我调整它之后窗口仍然丢失了纵横比。有人愿意帮忙吗?在

示例代码:

import cv2

# load the image, clone it, and setup the mouse callback function
image = cv2.imread('1.jpg')
cv2.namedWindow('image', cv2.WINDOW_KEEPRATIO)
# keep looping until the 'q' key is pressed
while True:
    # display the image and wait for a keypress
    cv2.imshow('image', image)
    key = cv2.waitKey()

    if key == 27:
        break

# close all open windows
cv2.destroyAllWindows()

Tags: andthekey代码图像imageimport示例
2条回答

您是要约束窗口还是图像?不能约束窗口大小,只能约束图像大小。在

请注意,在^{}的文档中,它在底部显示

By default, flags == CV_WINDOW_AUTOSIZE | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED

所以设置cv2.WINDOW_KEEPRATIO不会影响比率缩放(因为默认情况下它不影响比率)。在

我想你想要完成的是能够移动窗口的大小,从而影响你显示的图像大小。对吗?如果是这样的话,OpenCV是不可能实现的,至少不是内置的。图像窗口只是显示图像的容器,因此它们根本不会影响图像。当然,您可以在使用cv2.resize()显示之前调整图像大小。在


编辑:好的,所以我甚至不确定上面的内容是否是你想要的,但是我说用当前的OpenCV无法调整窗口的大小。事实上,这是有可能的。你可以创建一个轨迹条,它将在你的图像上放置一个滑块。然后当您移动滑块时,它将调用一个函数,该函数以滑块的位置为参数定义。然后你可以取这个位置,把它转换成一个介于0和1之间的数字,然后把你的图像大小乘以这个数字得到一个更小的图像大小。然后你可以按这个比例调整图像的大小,并在窗口中重新显示。我很确定这对你需要的东西来说太过分了,但它很有趣,所以我决定试试。在

import cv2

def trackbar_change(pos):
    pos = pos/100 # get a scaling factor from trackbar pos
    image = cv2.imread('image.jpg') # read image
    h = int(image.shape[0]*pos) # scale h
    w = int(image.shape[1]*pos) # scale w
    rsz_image = cv2.resize(image, (w, h)) # resize image
    cv2.resizeWindow('image_window', w, h) # resize window
    cv2.imshow('image_window', rsz_image) # display resized image
    return

image = cv2.imread('image.jpg')
cv2.namedWindow('image_window', cv2.WINDOW_NORMAL)
starting_trackbar_val = 100
quant_trackbar_vals = 100
cv2.createTrackbar('Image scale', 'image_window', \
    starting_trackbar_val, quant_trackbar_vals, trackbar_change)

cv2.imshow('image_window', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

可能是显示问题本身。说默认情况下,显示窗口很大。在上面的片段中,我没有看到对纵横比的任何更改。检查here

相关问题 更多 >