Трекбар opencv не регулируется

Я пытаюсь добавить трекбар 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 ответов

Другие вопросы по тегам