Я пытаюсь добавить трекбар 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);
}
Задача ещё не решена.
Других решений пока нет …