如何在OpenCV中更改轨道栏的顺序?

时间:2013-12-04 01:00:43

标签: opencv user-interface trackbar

通过使用cvCreateTrackbar(),我创建了一些轨道栏,但这些轨道栏是无序的。我在OpenCV中找不到任何改变顺序的功能。

那么......我怎样才能改变OpenCV中轨迹栏的顺序?

(请原谅我可怜的英语。)

似乎在我的程序中,窗口上的跟踪栏顺序与源代码中的跟踪栏顺序不同。

在我的源代码中:

亮度

对比度

灰色

灰色R百分比

灰色G百分比

灰色B百分比

温度

色相

饱和度

均化

在窗口上:

灰色G百分比

对比度

均化

亮度

灰色

灰色G百分比

灰色R百分比

温度

色相

饱和度

3 个答案:

答案 0 :(得分:4)

在el capitan(os x)的python 2.7下的开放CV 2.4.12中,源中的顺序对显示的顺序没有影响。这个名字确实有影响力。我已经尝试了所有方式的名称,无法解决模式。我有完全相同的问题。

#Lower Saturation
cv2.createTrackbar(color.satName[0], 'SAT+', color.sat[0], abs(color.sat[1]-color.sat[0]), adjust)

#Upper Hue
cv2.createTrackbar(color.hueName[1], 'HUE+', upperHue, abs(color.hue[1]-color.hue[0]), adjust)    
#Lower Hue
cv2.createTrackbar(color.hueName[0], 'HUE-', lowerHue, abs(color.hue[1]-color.hue[0]), adjust)

#Lower Value
cv2.createTrackbar(color.valName[0], 'VAL-', color.val[0], abs(color.val[1]-color.val[0]), adjust)

显示的订单是: VAL- 色调- 卫星 - HUE +

在不改变代码中的顺序的情况下替换各种其他字符会导致不同的显示顺序。每次运行代码时,顺序都是一致的。我找不到一种模式,这让我疯狂。

答案 1 :(得分:0)

只需更改源代码中的顺序即可。

窗口上的轨迹栏顺序与源代码中的轨道栏顺序相同。

如果你意味着更复杂的布局,我知道,OpenCV中没有这样的功能。

OpenCV中的GUI是一个快速而简单的GUI。

答案 2 :(得分:0)

我不知道如何解决你的问题,抱歉。

订单确实与他们在源中的订单相同。 (我只是在测试时再次测试。)

在我的程序中,跟踪器甚至比你的更多。所以这个数字不是问题。

但是,请注意

(0)我用Qt编译了OpenCV。所以“nameWindow”不会使用操作系统的默认窗口lib(例如Mac中的cocoa)。它将使用Qt样式窗口。

(1)我正在使用OpenCV的 C ++ 界面,而你的界面是 C 界面。
我建议你切换到c ++界面。从那以后

  

C API is not developed for a long time

因此,您的cvCreateTrackbar可能会出现意外行为。(只是猜测。)

(2)这是一个可运行的简单代码,使用c ++接口。如果c接口出现此问题,您可以使用它们来尝试。

#include <iostream>
#include <string>

#include "opencv2/opencv.hpp"

using namespace std ;
using namespace cv ;

int main()
{
    string wt_main = "demo" ;
    int A = 0 , B = 10 , C = 10 ;

    namedWindow( wt_main , CV_WINDOW_NORMAL ) ;

    createTrackbar( "Bar A", wt_main , &A , 3 , NULL ) ;
    createTrackbar( "Bar B", wt_main , &B , 400 , NULL ) ;
    createTrackbar( "Bar C", wt_main , &C , 400 , NULL ) ;

    waitKey() ;

    return 0;
}

使用 -lopencv_core -lopencv_highgui

进行编译

(3)在

寻求帮助

http://answers.opencv.org/questions/

以及如何调用 cvCreateTrackbar ,或许还包括您调用 cvNameWindow 的方式和位置(应该在cvCreateTrackbar之前)。

这就是我能为你做的一切。祝你好运