<p>您是要约束窗口还是图像?不能约束窗口大小,只能约束图像大小。在</p>
<p>请注意,在<a href="http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#namedwindow" rel="nofollow noreferrer">^{<cd1>}</a>的文档中,它在底部显示</p>
<blockquote>
<p>By default, <code>flags == CV_WINDOW_AUTOSIZE | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED</code></p>
</blockquote>
<p>所以设置<code>cv2.WINDOW_KEEPRATIO</code>不会影响比率缩放(因为默认情况下它不影响比率)。在</p>
<p>我想你想要完成的是能够移动窗口的大小,从而影响你显示的图像大小。对吗?如果是这样的话,OpenCV是不可能实现的,至少不是内置的。图像窗口只是显示图像的容器,因此它们根本不会影响图像。当然,您可以在使用<code>cv2.resize()</code>显示之前调整图像大小。在</p>
<hr/>
<p>编辑:好的,所以我甚至不确定上面的内容是否是你想要的,但是我说用当前的OpenCV无法调整窗口的大小。事实上,这是有可能的。你可以创建一个轨迹条,它将在你的图像上放置一个滑块。然后当您移动滑块时,它将调用一个函数,该函数以滑块的位置为参数定义。然后你可以取这个位置,把它转换成一个介于0和1之间的数字,然后把你的图像大小乘以这个数字得到一个更小的图像大小。然后你可以按这个比例调整图像的大小,并在窗口中重新显示。我很确定这对你需要的东西来说太过分了,但它很有趣,所以我决定试试。在</p>
<pre><code>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()
</code></pre>