opencv轨道栏不可调整

时间:2015-11-22 03:39:10

标签: c++ opencv trackbar

我正在尝试添加一个opencv轨道栏来调整我用于二进制阈值的阈值。

如果我只显示轨迹栏,那么我可以按预期滑动它,但是当我在第二个窗口中显示笔记本电脑相机中的视频时,轨迹栏会卡在一个位置而无法移动。我认为这可能与我如何通过threshold_value有关,但我似乎无法找到任何解决方案。

这是我的代码:

#include "opencv2/objdetect.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"

#include <iostream>
#include <stdio.h> 

using namespace std;
using namespace cv;

//Function Headers
void on_trackbar(int, void*);

// Global variables
int threshold_value = 30;
Mat frame_gray;

String face_cascade_name = "/opencv-3.0.0/data/haarcascades/haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
String window_name = "Capture";
String trackbarWindowName = "TrackBars";

int main( void )
{
    VideoCapture capture;
    Mat frame;

    //create windows and trackbar
    namedWindow(trackbarWindowName, WINDOW_AUTOSIZE);
    namedWindow(window_name, WINDOW_AUTOSIZE);
    createTrackbar("threshold", trackbarWindowName, &threshold_value, 255, on_trackbar);

    //Load the face cascade
    face_cascade.load( face_cascade_name );

    //Read the video stream
    capture.open( 0 );
    printf("opened webcam\n");

    while ( capture.read(frame) )
    {
        if( frame.empty() )
        {
            printf(" --(!) No captured frame -- Break!");
            break;
        }

        cvtColor( frame, frame_gray, COLOR_BGR2GRAY );
        threshold( frame_gray, frame_gray, threshold_value, 255, 1);
        imshow( window_name, frame_gray);
        int c = waitKey(10);
        if( (char)c == 27 ) { break; } // escape

    }
    return 0;
    }

void on_trackbar(int, void*){
    printf("hello\n");
    printf("%d\n", threshold_value);
}

0 个答案:

没有答案