我有以下代码从网络摄像头获取视频,然后执行HOG检测。
但是,当我添加HOG检测代码时,代码只能在运行时抓取第一个图像,并且在后续迭代时不会刷新。我使用断点检查程序是否持续运行。
请指教。谢谢。
void doDetection(void){
VideoCapture cap("http://user:password@10.0.0.1/mjpg/video.mjpg");
if (!cap.isOpened())
return;
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
while (true)
{
Mat img, mono_img;
bool status = cap.read(img);
if (status == false) break;
vector<Rect> found, found_filtered;
cvtColor(img, mono_img, CV_BGR2GRAY);
equalizeHist(mono_img, mono_img);
// this is the problem statement , when removed this program refresh fine
hog.detectMultiScale(mono_img, found, 0, Size(8, 8), Size(50, 50), 1.05, 2);
imshow("Show", img);
if (waitKey(20) >= 0)
break;
}
}
答案 0 :(得分:0)
我发现即使暂停代码执行一段时间也会发生这种情况。 在我的情况下,MJPEG OVERREAD将出现在控制台中,之后不会再从流中抓取图像,但流仍然是“开放”
我围绕这个重置捕获的问题构建了这个小问题。把它放在你的WHILE
中 if (cap.isOpened())
{
cap.read(img);
if (img.rows == 0)
{
cap.release();
cap.open("");//Insert own url
cap.read(img);
}
}
else
{
cap.open(""); //Insert own url
cap.read(img);
}
如果通过让应用程序保持运行来“解决”问题,则应该在单独的线程上捕获帧以防止流像这样死亡。 如果这不能“解决”问题,我不确定还有什么可能是错的