Перейти к содержимому
Compvision.ru

Argon

Пользователи
  • Количество публикаций

    37
  • Зарегистрирован

  • Посещение

  • Days Won

    11

Argon last won the day on May 27 2017

Argon had the most liked content!

Репутация

2 Новичек

О Argon

  • Звание
    Эксперт
  1. Распознавание лиц

    Приветствую! начал изучать каскад Хаара и тут же напоролся на "грабли" вот немного переделанный код с этого форума(среда Qt), за инклюды не пинайте #include "mainwindow.h" #include "ui_mainwindow.h" #include<opencv/cv.h> #include<opencv/highgui.h> #include<QEvent> #include<QtCore> #include<QFileDialog> #include<QtGui> #include<QMessageBox> #include<QImage> #include<QTimer> #include<QWidget> #include<qwidget.h> #include<QString> #include<QSlider> #include<qslider.h> #include<QHeaderView> #include<qstyleoption.h> #include<qabstractitemview.h> #include<QSpinBox> #include<qspinbox.h> #include<QTime> #include<QTimeEdit> #include<QSettings> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/objdetect/objdetect.hpp" using namespace std; using namespace cv; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); timerStartStop = new QTimer(this); connect(timerStartStop, SIGNAL(timeout()), this, SLOT(StartStopVideoFromWebcam())); timerStartStop->stop(); // Указатель на каскад Хаара this->cascade = 0; camWebcam.open(0); if(camWebcam.isOpened() == false) { ui->statusBar->showMessage("Невозможно определить камеру, проверьте подключение."); QMessageBox::information(this, "Внимание", "Камера не обнаружена, проверьте подключение"); } else { ui->statusBar->showMessage("Подключение прошло успешно, камера готова к работе."); } camWebcam.release(); // Создаем строку, содержащую точное имя каскад const char* cascade_name ="C://haarcascade_frontalface_alt.xml"; // Загружаем HaarClassifierCascade cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); } MainWindow::~MainWindow() { delete ui; } void MainWindow::ShawImage(cv::Mat img) //собственно и сама функция поиска лица { CvMemStorage* storage = 0; int scale = 1; // Создаем две точки, представляющие местоположение лица CvPoint pt1, pt2; int i; // Выделим память для хранения storage = cvCreateMemStorage(0); // Очистим хранилище памяти, который использовался до cvClearMemStorage( storage ); // Найдем загрузился каскад, чтобы найти лица. Если да, то: if( cascade ) { CvSize min = cvSize(40,40); CvSeq* faces = cvHaarDetectObjects(&img, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, min); //в отладчике на этой строке валится программа img = cv::Mat for( i = 0; i < (faces ? faces->total : 0); i++ ) { // Создаем новый прямоугольник для рисования лица CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); // Найдем размеры лица, и масштабы его, если необходимо, pt1.x = r->x*scale; pt2.x = (r->x+r->width)*scale; pt1.y = r->y*scale; pt2.y = (r->y+r->height)*scale; // Нарисуем прямоугольник, в входное изображение cv::rectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 ); } } cv::cvtColor(img, img, CV_BGR2RGB); QImage imgshow((uchar*)img.data, img.cols, img.rows, img.step, QImage::Format_RGB888); ui->lblImage->setPixmap(QPixmap::fromImage(imgshow)); } void MainWindow::StartStopVideoFromWebcam() //таймер обработки кадров с вэб камеры { camWebcam.open(0); camWebcam.read(frame); if (frame.empty() == true) { ui->statusBar->showMessage("Ошибка при захвате видео!"); return; } ShawImage(frame); } void MainWindow::on_pushButton_3_clicked() //кнопка выхода { close(); } void MainWindow::on_pushButton_clicked() //кнопка запуска трэкинга { timerStartStop->start(33); } void MainWindow::on_pushButton_2_clicked() //кнопка остановки таймера { timerStartStop->stop(); } программа валится на этой строке CvSeq* faces = cvHaarDetectObjects(&img, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, min); ошибка следующая: OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file C:\opencv\modules\core\src\array.cpp, line 2482 что я делаю не так?
  2. Запись видео в файл

    справился, а всего лишь стоило параметр is_color присвоить 1.... writer = cvCreateVideoWriter(cFileForWriteInFile, CV_FOURCC('X','V','I','D'), fps, sizeForFile, 1);
  3. Запись видео в файл

    возвращает чило 0.... установил все кодаки... opencv_ffmpeg*.dll удалить нельзя т.к. он используется при обработку видео файлов... а как только скрываю его, то вся программа перестает работать... проблема актуальна....
  4. Запись видео в файл

    1) что то я не совсем понимаю что долна возвращать эта фукция... ...вроде она должна только инициировать запись кадра в файл... 2) пробовал закрывать, не помогло... зы: пробую просматривать записываемые кадры, все гуд на просмотре, а записываться не хотят...
  5. Запись видео в файл

    отладчик выдает следующее: writer @0x1d051aa0 [CvVideoWriter] [vptr] 0x9afe28 [0] 0x7aaf4c <CvVideoWriter_FFMPEG_proxy::~CvVideoWriter_FFMPEG_proxy()> [1] 0x7aaf28 <CvVideoWriter_FFMPEG_proxy::~CvVideoWriter_FFMPEG_proxy()> [2] 0x7aaa74 <CvVideoWriter_FFMPEG_proxy::writeFrame(_IplImage const*)> [3] 0x7aadfc <CvVideoWriter_FFMPEG_proxy::open(char const*, int, double, CvSize, bool)> [4] 0x7aae9c <CvVideoWriter_FFMPEG_proxy::close()> ffmpegWriter 0x1d0bb6a8 void *
  6. Запись видео в файл

    Как это делается я знаю(благо в интернете полно информации), но вот сам вопрос таков: почему не формирует выходной файл? задаю значения переменым fps = 16; sizeForFile = cvSize(640,480); cFileForWriteInFile = "MouseTrecking.avi"; writer = cvCreateVideoWriter(cFileForWriteInFile, CV_FOURCC('X','V','I','D'), fps, sizeForFile, 0); хочу провеести запись в файл: IplImage imgforwrite = matOriginal; IplImage* temp = &imgforwrite; cvWriteFrame(writer, temp); в итоге у меня получается только пустой файл с названием ... ЗЫ: думал что некорректно конвертируеся файл, но все ок... ЗЫЫ: на кодак не ругается, все находит...
  7. opencv + win32(64) + Qt

    неправдали я охеренен , буду разбираться дальше...
  8. opencv + win32(64) + Qt

    чувак... отладчиком я и нашел где ошибка выскакивает, точнее после каких действий... 2Smorodov у меня 32-х разрядный Qt и библиотеки opencv сформированные в 32-х разрядной ОС но все равно поробую еще раз перенастроить
  9. opencv + win32(64) + Qt

    что значит перестроить? я на вторую "машину" отдельно устанавливал QT и переформировывал библиотеки, и естественно сделал подключение к новым библиокекам(каторые формировал на 32-х битной машине)
  10. opencv + win32(64) + Qt

    Доброго времени суток! Изначально писал программу на 64-ох битной системе, затем перенес ее на 32-х битную, переформировал все библиотеки программой cmake, и в итоге имею следующее на 64 битной системе код обрабатывается правильно: void MouseDetected::on_btnLoadFromFile_clicked() { QString qVideofileName = QFileDialog::getOpenFileName(this, tr("Выберите видео файл"), "", tr("Video file (*.avi);;All Files (*)")); if(qVideofileName.isEmpty() == false) { ui->txtFileOpen->setText(qVideofileName); capture = cvCreateFileCapture(qVideofileName.toStdString().c_str()); framesCount = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); iPositin = (int)framesCount; frame = cvQueryFrame(capture); dPosSlid = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES); iFirstPosition = (int)dPosSlid; ui->horizontalSlider->setMaximum(iPositin); ui->horizontalSlider->setRange(iFirstPosition, iPositin); ui->progressBar->setMaximum(iPositin); ui->nomKadr->setMaximum(iPositin); storage = 0; //загружаем фоновое изображение(временно, переделать для кнопки(изменить) и добавить просмотр из формы) matFon = cvLoadImage("D:\\myProjekt\\MouseTreking\\fon\\fon.png"); cv::cvtColor(matFon, matFon, CV_RGB2GRAY); cv::GaussianBlur(matFon, matFon, cv::Size(3,3), -1); cv::cvtColor(frame, frame, CV_BGR2RGB); QImage gimgOriginal((uchar*)frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888); ui->IplOutputImage->setPixmap(QPixmap::fromImage(gimgOriginal)); } } а на 32-х ошибка возникает тут frame = cvQueryFrame(capture); ...... cv::cvtColor(frame, frame, CV_BGR2RGB); т.е. программа не может разложить файл на кадры... в чем может быть проблема?
  11. но т.к. код тормозил выполнение программы пришлось его сократить cv::putText(matOriginal,"Object in ROI A: " + t_TimeForEditA.toString().toStdString() ,cv::Point(10,25),CV_FONT_HERSHEY_COMPLEX, 0.4f, cv::Scalar(255,255,255),1,CV_AA);
  12. Спасибо, но не получилось по вашему совету делал так QString text = t_TimeForEditA.toString(); const std::string textTime = text.toStdString(); cv::putText(matOriginal,"Object in ROI A: " + textTime ,cv::Point(10,25),CV_FONT_HERSHEY_COMPLEX, 0.4f, cv::Scalar(255,255,255),1,CV_AA);
  13. Еще вопрос: Есть QTime t_TimeObjA в который я записываю время пребывания объекта в определенной области, но как тольок хочу наложить это время на изображение, то выбрасывает ошибку... накладываю так cv::putText(matOriginal, "Object in ROI A: " + t_TimeObjA.toString() ,cv::Point(10,25),CV_FONT_HERSHEY_COMPLEX, 0.4f, cv::Scalar(255,255,255),1,CV_AA); но если использую QMessagebox::information(this, "1", t_TimeObjA.toString()) то выводит сообщение с временем как нужно (00:00:00)...
  14. извините мой косяк: использовал setValue, а другой функцией касался valueChange .... ...дорогой же учитель опыт....
×