歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCv在Qt中的使用

OpenCv在Qt中的使用

日期:2017/3/1 11:02:18   编辑:Linux編程

1.使用OpenCV進行打開攝像頭並進行錄像

  1. CvCapture *capture;
  2. IplImage *frame;
  3. QImage *qImg;
  4. QTimer *timer;
  5. capture = cvCaptureFromCAM(0);
  6. cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,320);
  7. cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,240);
  8. if(capture)
  9. {
  10. QMessageBox::information(this,"Information","successful!");
  11. if (capture)
  12. {
  13. frame = cvQueryFrame(capture);
  14. if (frame)
  15. this->resize(frame->width,frame->height);
  16. qImg = new QImage(QSize(frame->width,frame->height),QImage::Format_RGB888);
  17. iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height),8,3);
  18. iplImg->imageData = (char*)qImg->bits();
  19. timer = new QTimer(this);
  20. timer->setInterval(30);
  21. connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));
  22. timer->start();
  23. writer = cvCreateVideoWriter("out.avi",CV_FOURCC('D', 'I', 'V', 'X'),10,
  24. cvSize(frame->width,frame->height),1);
  25. isCamera = true;
  26. }
  27. }
  28. else
  29. {
  30. QMessageBox::information(this,"Information","Sorry,fail!");
  31. isCamera = false;
  32. }
  33. void openCV::paintEvent(QPaintEvent *e)
  34. {
  35. QPainter painter(this);
  36. if(isCamera == true)
  37. {
  38. painter.drawImage(QPoint(0,0),*qImg);
  39. }
  40. else
  41. {
  42. }
  43. }
  44. void openCV::nextFrame()
  45. {
  46. frame = cvQueryFrame(capture);
  47. if (frame)
  48. {
  49. if (frame->origin == IPL_ORIGIN_TL)
  50. {
  51. cvCopy(frame,iplImg,0);
  52. }
  53. else
  54. {
  55. cvFlip(frame,iplImg,0);
  56. }
  57. cvCvtColor(iplImg,iplImg,CV_BGR2RGB);
  58. cvWriteFrame(writer,frame);
  59. this->update();
  60. }
  61. }

在編譯的目錄下就有out.avi這個視頻文件,要打開視頻文件如下:

  1. CvCapture *capture;
  2. IplImage *frame;
  3. QImage *qImg;
  4. QTimer *timer;
  5. capture = cvCaptureFromFile("out.avi");
  6. if (capture)
  7. {
  8. frame = cvQueryFrame(capture);
  9. if (frame)
  10. this->resize(frame->width,frame->height);
  11. qImg = new QImage(QSize(frame->width,frame->height),QImage::Format_RGB888);
  12. iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height),8,3);
  13. iplImg->imageData = (char*)qImg->bits();
  14. timer = new QTimer(this);
  15. timer->setInterval(30);
  16. connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));
  17. timer->start();
  18. isCamera = true;
  19. }
  20. else
  21. {
  22. QMessageBox::information(this,"Information","Sorry,fail!");
  23. isCamera = false;
  24. }
  25. void openCV::paintEvent(QPaintEvent *e)
  26. {
  27. QPainter painter(this);
  28. if(isCamera == true)
  29. {
  30. painter.drawImage(QPoint(0,0),*qImg);
  31. }
  32. else
  33. {
  34. }
  35. }
  36. void openCV::nextFrame()
  37. {
  38. frame = cvQueryFrame(capture);
  39. if (frame)
  40. {
  41. if (frame->origin == IPL_ORIGIN_TL)
  42. {
  43. cvCopy(frame,iplImg,0);
  44. }
  45. else
  46. {
  47. cvFlip(frame,iplImg,0);
  48. }
  49. cvCvtColor(iplImg,iplImg,CV_BGR2RGB);
  50. this->update();
  51. }
  52. }
Copyright © Linux教程網 All Rights Reserved