首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV:为什么一条铁轨比其他的短?

OpenCV:为什么一条铁轨比其他的短?
EN

Stack Overflow用户
提问于 2022-11-08 10:05:41
回答 1查看 58关注 0票数 3

我遇到了一个奇怪的问题,希望有人能给我解释一下,这样以后我才能避免这个问题。当我放置多个轨迹栏(在我的例子中是6)时,最后一个轨迹栏要短得多。以下是基本代码:

代码语言:javascript
复制
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)

我注意到,使窗口变大可以解决这个问题:

代码语言:javascript
复制
cv2.resizeWindow('TrackBars', 500, 320)

虽然下面有很大的空间,但我想也许窗户长出了铁轨,这让它的行为很奇怪。然而,在准备在这里发布代码时,我发现有2或3个轨迹栏可以正常工作,即使一个是靠窗口裁剪的。只有在有4个或4个以上的情况下才会发生这种行为。

代码语言:javascript
复制
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
  • OS:Windows 10
  • HighGUI后端:WinAPI
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-08 23:25:23

这是OpenCV中的一个bug,似乎已经在那里逗留了一段时间。经过几个小时的挖掘(并在代码中发现了其他几个问题),我想我已经抓住了它,并提交了一个错误报告,并提出了解决方案。我将在不久的将来提出一个拉请求,希望在4.7.0版本中能够解决这个问题。

总结这个问题: trackbar控件被添加到工具栏控件中,随着添加更多控件,工具栏控件垂直增长。由于主窗口大小是在创建控件时固定的,因此工具栏未占用的其余“工作区”将逐渐缩小,直到没有空间(因此其大小变为0)。

错误在于,为了设置trackbar控件的宽度,需要使用剩余的“工作区”的宽度。一旦“工作区”缩小到零,它的大小就变成0,Windows使用其他值作为trackbar的默认宽度。

使用工具栏的宽度(总是可用的)解决了这个问题。

应用了该修补程序后,我可以得到以下内容:

更新:许多修复程序也将应用于3.4分支。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74358897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档