我遇到了一個奇怪的問題,希望有人向我解釋,這樣我以后可以避免它。當我放置多個軌跡欄(在我的情況下為 6 個)時,最后一個軌跡欄要短得多。這是基本代碼:
import cv2
def nothing(arguments):
pass
cv2.namedWindow('TrackBars')
cv2.resizeWindow('TrackBars', 500, 300)
cv2.createTrackbar('Slider 1', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 2', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 3', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 4', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 5', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 6', 'TrackBars', 0, 255, nothing)
cv2.waitKey(0)
我注意到使視窗變大可以解決問題:
cv2.resizeWindow('TrackBars', 500, 320)
盡管下面有很多空間,但我認為視窗可能會裁剪軌跡欄,使其表現得很奇怪。但是,在準備要在此處發布的代碼時,我發現擁有 2 或 3 個軌跡欄可以正常作業,即使其中一個被視窗裁剪。只有當有 4 個或更多時才會發生此行為。
import cv2
def nothing(arguments):
pass
cv2.namedWindow('TrackBars')
cv2.resizeWindow('TrackBars', 500, 60)
cv2.createTrackbar('Slider 1', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 2', 'TrackBars', 0, 255, nothing)
cv2.waitKey(0)
這里發生了什么?為什么其中一個軌跡條更短,但只有當它們有很多時?
附加資訊:
- OpenCV:4.6.0.66
- 作業系統:Windows 10
- HighGUI 后端:WinAPI
uj5u.com熱心網友回復:
這是 OpenCV 中的一個錯誤,似乎已經存在了一段時間。經過幾個小時的挖掘(并在此程序中發現了代碼中的一些其他問題),我想我已經找到了它并提交了一份帶有建議解決方案的錯誤報告。我將在不久的將來提出拉取請求,希望這可以在 4.7.0 版本中解決。
總結問題:將軌跡欄控制元件添加到工具列控制元件中,隨著更多控制元件的添加,它會垂直增長。由于在創建控制元件時主視窗大小是固定的,因此工具列未占用的剩余“客戶區”逐漸縮小,直到沒有剩余空間(因此其大小變為 0)。
錯誤在于,為了設定軌跡欄控制元件的寬度,使用了剩余“客戶區”的寬度。一旦“客戶區”縮小到零,它的大小就變為 0,Windows 使用其他值作為軌跡欄的默認寬度。
使用工具列的寬度(始終可用)可以解決問題。
應用該修復程式后,我可以獲得以下資訊:

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531074.html
標籤:Pythonopencv
