我遇到了一个奇怪的问题,希望有人给我解释一下,这样我以后就可以避免了。当我放置多个跟踪条(在我的例子中是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)
这里发生了什么?为什么其中一个trackbar短了,但只有当有很多trackbar的时候?
其他信息:
*OpenCV:网址:4.6.0.66
*操作系统:Windows 10操作系统
*HighGUI后端:WinAPI软件包
1条答案
按热度按时间8qgya5xd1#
这是OpenCV中的一个bug,似乎已经在那里徘徊了一段时间。经过几个小时的挖掘(并在代码中发现了一些其他问题),我想我已经抓住了它,并提交了一个bug report和建议的解决方案。我将在不久的将来提出一个拉取请求,希望这个问题能在4.7.0版本中得到解决。
总结问题:跟踪条控件被添加到工具栏控件中,当添加更多控件时,工具栏控件会垂直增长。由于主窗口的大小在创建控件时是固定的,因此未被工具栏占用的剩余“工作区”会逐渐缩小,直到没有剩余空间(因此其大小变为0)。
缺陷是为了设置跟踪条控件的宽度,使用了剩余的“客户区”的宽度。一旦“客户区”缩小到零,它的大小就变成了0,Windows使用其他值作为跟踪条的默认宽度。
使用工具栏的宽度(始终可用)可以解决此问题。
应用该修复程序后,我可以得到以下结果: