簡體   English   中英

如何在opencv中保持圖像窗口的寬高比?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM