我正在尝试添加一个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);
}