[英]How to keep the aspect ratio of image window in opencv?
從文檔中可以看出,我們可以通過CV_WINDOW_KEEPRATIO保持圖像比例,但是在調整后窗口仍然會丟失寬高比。 有人會幫忙嗎?
示例代碼:
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()
你想限制窗口或圖像嗎? 您不能限制窗口大小,只能限制圖像大小。
請注意,在namedWindow
的文檔中,它在底部顯示
默認情況下,
flags == CV_WINDOW_AUTOSIZE | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED
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()
它可能是顯示器本身的問題。默認情況下,您的顯示窗口很大。 在上面的代碼片段中,我沒有看到對寬高比的任何更改。 點擊這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.