我使用 haar 级联进行实时交通标志识别。我的网络摄像头检测到一个标志,然后提取 frameROI,将图像保存到文件中,然后我想使用 SVM、k-NN 分类器等(尚未完成)识别该图像。但问题是标志被多次抓取。如何解决这个问题? 我做了一项研究,找到了一个解决方案 template matching .但是我究竟应该如何使用这个函数来停止获取曾经检测到的符号的 frameROI?我是初学者,所以请理解。
Mat sign;
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
ui->setupUi(this);
capWebcam.open(0);
if (capWebcam.isOpened() == false) {
QMessageBox::critical(this, tr("Błąd"), tr("brak kamerki"));
return;
}
QTimer *timer = new QTimer;
connect(timer, SIGNAL(timeout()), this,
SLOT(processFrameAndUpdateGUI()));
timer->start(5);
}
void Dialog::processFrameAndUpdateGUI()
{
CascadeClassifier tsr_cascade;
tsr_cascade.load("a.xml");
Mat image;
Mat image2;
Mat frameROI;
capWebcam.read(image);
cvtColor(image, image2, CV_BGR2GRAY);
equalizeHist(image2, image2);
vector<Rect>znaki;
tsr_cascade.detectMultiScale(image2, znaki, 1.1, 3, CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < znaki.size(); i++)
{
Point pt1(znaki[i].x + znaki[i].width, znaki[i].y + znaki[i].height);
Point pt2(znaki[i].x, znaki[i].y);
rectangle(image, pt1, pt2, cvScalar(0, 255, 0, 0), 1, 8, 0);
frameROI = image(Rect(znaki[i].x, znaki[i].y, znaki[i].width, znaki[i].height));
sign = frameROI;
}
imwrite("znak.jpg", sign);
QPixmap s = ("znak.jpg");
QImage qimg((uchar*)image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);
QImage qimg2((uchar*)frameROI.data, frameROI.cols, frameROI.rows, frameROI.step, QImage::Format_RGB888);
ui->label_3->setPixmap(QPixmap::fromImage(qimg2));
ui->label->setPixmap(QPixmap::fromImage(qimg));
ui->label_2->setPixmap(s);
}
Dialog::~Dialog()
{
delete ui;
}
最佳答案
connect(timer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGUI()));
timer->start(5);
由于信号 timeout()
,抓取帧的函数总是每 5 毫秒超时一次
计时器始终按照 Timer::start()
运行
Starts or restarts the timer with a timeout of duration msec milliseconds.
If the timer is already running, it will be stopped and restarted.
你需要一个单次定时器。
// fires only once in 200 ms
QTimer::singleShot(200, this, SLOT(processFrameAndUpdateGUI()));
关于c++ - 如何在视频序列中识别一次图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292075/