当前位置: 首页 > news >正文

建音乐网站美国最新消息今天 新闻

建音乐网站,美国最新消息今天 新闻,深圳 商城 网站建设,域名购买后如何建设网站前言 需求: 1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、 2、采用多线程 3、获知当前摄像头的帧率。 这个需求,之前就有做了,但是由于出现了一个问题,人家摄像头的帧率目前都可以达到60帧/s 了,而我的程序…

前言

需求:

1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、

2、采用多线程

3、获知当前摄像头的帧率。

这个需求,之前就有做了,但是由于出现了一个问题,人家摄像头的帧率目前都可以达到60帧/s 了,而我的程序获取的却还只能获取20帧/s ,那么肯定就是存在问题了。所以,目前采用了一些办法进行解决,能充分发挥其60帧/s 的优势,并能打出帧率。下面开始详细阐述。

正文

一、环境

1、Win10

2、Qt 5.8.0 MSVC2015

3、OpenCV VS2015编译的

二、效果展示

请添加图片描述

三、关键代码

1、抓图线程:

bool CCameraCaptureThd::Init()
{int index = 5;while (true){m_bInit = m_capture.open(0+cv::CAP_DSHOW, cv::CAP_ANY);  // 打开默认摄像头m_capture.set(cv::CAP_PROP_FRAME_WIDTH, 1280);m_capture.set(cv::CAP_PROP_FRAME_HEIGHT, 720);m_capture.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));if (m_bInit){return true;}else{index--;QThread::sleep(1);if (index < 0){qDebug() << "--> Failed to initialize camera!";return false;}}}return true;
}void CCameraCaptureThd::StartCapture()
{m_bCapture = true;double dExpore = m_capture.get(cv::CAP_PROP_EXPOSURE);double dBrightness = m_capture.get(cv::CAP_PROP_BRIGHTNESS);qDebug() << "---> dExpore:"<<dExpore<<"||"<<dBrightness;
}void CCameraCaptureThd::StopCapture()
{m_bCapture = false;
}bool CCameraCaptureThd::SetCameraBrightness(const int &_iBrightness)
{bool bRet = false;if (false == m_capture.isOpened()){return bRet;}qDebug() << "---> CCameraCaptureThd::SetCameraBrightness _iBrightness:"<<_iBrightness;bRet = m_capture.set(cv::CAP_PROP_BRIGHTNESS, _iBrightness);double dBrightness = m_capture.get(cv::CAP_PROP_BRIGHTNESS);qDebug() << "---> CCameraCaptureThd dBrightness:"<<dBrightness;return bRet;
}bool CCameraCaptureThd::SetCameraExposure(const int &_iExposure)
{bool bRet = false;if (false == m_capture.isOpened()){return bRet;}qDebug() << "---> CCameraCaptureThd::SetCameraExposure _iExposure:"<<_iExposure;bRet = m_capture.set(cv::CAP_PROP_EXPOSURE, _iExposure);double dExpore = m_capture.get(cv::CAP_PROP_EXPOSURE);qDebug() << "---> CCameraCaptureThd dExpore:"<<dExpore;return bRet;
}void CCameraCaptureThd::run()
{std::thread captureThread(&CCameraCaptureThd::captureThreadFunc, this);captureThread.detach();  // 捕获线程独立运行while (!m_bExit){cv::Mat frame;{std::unique_lock<std::mutex> lock(m_mtxQueue);if (m_frameQueue.empty()){m_cvQueue.wait(lock, [this] { return !m_frameQueue.empty() || m_bExit; });}if (m_bExit) break;frame = m_frameQueue.front();m_frameQueue.pop();}if (!frame.empty()){processFrame(frame);calculateFps(); // 每处理一帧计算一次 FPS}}
}void CCameraCaptureThd::captureThreadFunc()
{while (!m_bExit){cv::Mat frame;if (m_capture.isOpened() && m_bCapture){m_capture.read(frame);if (frame.empty() || !_CheckMat(frame)){if (!m_bWrongCamera){emit SIGNAL_CameraWrong();m_bWrongCamera = true;}continue;}std::lock_guard<std::mutex> lock(m_mtxQueue);if (m_frameQueue.size() >= m_maxQueueSize){m_frameQueue.pop();  // 丢弃旧帧}m_frameQueue.push(frame);m_cvQueue.notify_one();}QThread::msleep(m_iImageCaptureSleepTime);}
}void CCameraCaptureThd::processFrame(const cv::Mat& frame)
{cv::Mat processedFrame;frame.copyTo(processedFrame);cv::cvtColor(processedFrame, processedFrame, cv::COLOR_BGR2RGB);cv::flip(processedFrame, processedFrame, 1);  // Y 轴翻转QImage img = QImage((uint8_t*)processedFrame.data, processedFrame.cols, processedFrame.rows, QImage::Format_RGB888).copy();//qDebug() << "---> processFrame:"<<QDateTime::currentMSecsSinceEpoch();emit SIGNAL_UpdateRgbImage(img);
}void CCameraCaptureThd::calculateFps()
{++m_frameCount;auto now = std::chrono::steady_clock::now();double elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(now - m_startTime).count();if (elapsedTime >= 1000.0) // 每秒更新一次 FPS{m_currentFps = m_frameCount * (1000.0 / elapsedTime);m_frameCount = 0;m_startTime = now;qDebug() << "Current FPS:" << m_currentFps;emit SIGNAL_FrameRate(m_currentFps);}
}bool CCameraCaptureThd::_CheckMat(const cv::Mat& mat)
{return !mat.empty() && mat.cols > 0 && mat.rows > 0;
}

最关键的就是run里面的函数了。

四、遇到的问题

1、帧率怎么都上不去

解决方案:更改了相机打开时的设置

更改成这样:

m_bInit = m_capture.open(0+cv::CAP_DSHOW, cv::CAP_ANY);  // 打开默认摄像头
m_capture.set(cv::CAP_PROP_FRAME_WIDTH, 1280);
m_capture.set(cv::CAP_PROP_FRAME_HEIGHT, 720);
m_capture.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));

如果是这样的,帧率就会上不去:

m_capture.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
m_bInit = m_capture.open(0+cv::CAP_DSHOW, cv::CAP_ANY);  // 打开默认摄像头
m_capture.set(cv::CAP_PROP_FRAME_WIDTH, 1280);
m_capture.set(cv::CAP_PROP_FRAME_HEIGHT, 720);

通过查询,问题的原因应该在:

属性设置的顺序如何影响帧率

  1. 属性的优先级问题
    • 摄像头通常优先处理某些属性。例如:
      • 分辨率 (FRAME_WIDTH, FRAME_HEIGHT) 是基础属性,影响图像传感器的输出格式。
      • 编码格式 (FOURCC) 决定图像流的压缩方式。
    • 如果先设置分辨率,然后设置编码格式,编码器会根据新分辨率重新调整帧率。
    • 反之,如果先设置编码格式,随后更改分辨率,驱动可能无法实时适配,导致性能下降。
  2. 驱动和硬件内部调整机制
    • 摄像头驱动程序在每次设置参数时,可能会重新协商帧率。例如:
      • 设置分辨率后,驱动需要查询硬件支持的最大帧率。
      • 如果在分辨率设置之前先设置编码格式,驱动可能会选择一个默认分辨率(通常较低),随后改变分辨率会导致帧率调整。
  3. 参数依赖性问题
    • 某些参数依赖于其他参数。例如:
      • 不同的编码格式支持的最大帧率和分辨率是不同的。
      • MJPG(Motion JPEG)通常支持高分辨率和高帧率,但 YUV 格式可能性能较低。
  4. 初始化次序影响驱动的行为
    • 驱动可能在第一次设置后锁定某些参数。如果设置顺序错误,后续参数可能不会生效,或需要额外的时间重新初始化。
    • 例如,先设置编码格式再设置分辨率,可能触发两次完整的驱动初始化。

正确的设置顺序建议

为了确保帧率最大化,可以按照以下顺序设置参数:

  1. 设置分辨率
    • 首先设置分辨率 (FRAME_WIDTHFRAME_HEIGHT),确保摄像头硬件和驱动调整到正确的传感器输出。
  2. 设置帧率(如果需要):
    • 如果特定帧率是关键要求,可以尝试显式设置帧率(cv::CAP_PROP_FPS)。
  3. 设置编码格式
    • 最后设置编码格式 (FOURCC),以确保基于之前设置的分辨率和帧率进行编码。

还有另一个原因,就是我抓图与处理的线程处于同一个,这样也会拉低整个线程处理的效率。

2、调整USB摄像头的亮度与曝光,出现意外情况

若不按照先调曝光再调增益的顺序,有可能出现调整曝光错乱的情况,原因未知。

目前按照的逻辑是,若想亮起来,则为:曝光:0 + 亮度:64

若想暗下来,则为:曝光:-13 + 亮度:-64

五、资源

https://github.com/calorsol/QtDemo/tree/master/OpenCVCaptureTest

参考


文章转载自:
http://assentient.Lgnz.cn
http://nce.Lgnz.cn
http://discursion.Lgnz.cn
http://immie.Lgnz.cn
http://fertilizable.Lgnz.cn
http://apercu.Lgnz.cn
http://rasophore.Lgnz.cn
http://abiogenist.Lgnz.cn
http://lactation.Lgnz.cn
http://seizing.Lgnz.cn
http://liftman.Lgnz.cn
http://burrito.Lgnz.cn
http://metatony.Lgnz.cn
http://pittypat.Lgnz.cn
http://cassation.Lgnz.cn
http://sulfonylurea.Lgnz.cn
http://farceur.Lgnz.cn
http://devaluationist.Lgnz.cn
http://aisled.Lgnz.cn
http://gilding.Lgnz.cn
http://zone.Lgnz.cn
http://anticline.Lgnz.cn
http://madrilene.Lgnz.cn
http://droob.Lgnz.cn
http://gownsman.Lgnz.cn
http://peaceless.Lgnz.cn
http://miscreant.Lgnz.cn
http://racetrack.Lgnz.cn
http://director.Lgnz.cn
http://venturous.Lgnz.cn
http://buster.Lgnz.cn
http://trainman.Lgnz.cn
http://dysfunction.Lgnz.cn
http://bushelage.Lgnz.cn
http://tumular.Lgnz.cn
http://adnominal.Lgnz.cn
http://pharmacotherapy.Lgnz.cn
http://ratproof.Lgnz.cn
http://tickey.Lgnz.cn
http://trenton.Lgnz.cn
http://westwardly.Lgnz.cn
http://optative.Lgnz.cn
http://rerecord.Lgnz.cn
http://plasticine.Lgnz.cn
http://action.Lgnz.cn
http://rarely.Lgnz.cn
http://shrewmouse.Lgnz.cn
http://grumpish.Lgnz.cn
http://irrefutable.Lgnz.cn
http://persuader.Lgnz.cn
http://medicable.Lgnz.cn
http://appreciative.Lgnz.cn
http://hero.Lgnz.cn
http://etu.Lgnz.cn
http://unpitying.Lgnz.cn
http://delectation.Lgnz.cn
http://diaphaneity.Lgnz.cn
http://ambrose.Lgnz.cn
http://sncc.Lgnz.cn
http://consonancy.Lgnz.cn
http://cartology.Lgnz.cn
http://workboard.Lgnz.cn
http://eurovision.Lgnz.cn
http://unadaptable.Lgnz.cn
http://transilluminate.Lgnz.cn
http://plp.Lgnz.cn
http://maniple.Lgnz.cn
http://formularization.Lgnz.cn
http://periodontal.Lgnz.cn
http://faradize.Lgnz.cn
http://newspaperman.Lgnz.cn
http://psychosociological.Lgnz.cn
http://thecodont.Lgnz.cn
http://ovibovine.Lgnz.cn
http://firebreak.Lgnz.cn
http://reinterrogate.Lgnz.cn
http://unabbreviated.Lgnz.cn
http://mystification.Lgnz.cn
http://emetin.Lgnz.cn
http://antifluoridationist.Lgnz.cn
http://yager.Lgnz.cn
http://glasswort.Lgnz.cn
http://tortuose.Lgnz.cn
http://locate.Lgnz.cn
http://readme.Lgnz.cn
http://roscoe.Lgnz.cn
http://swingtree.Lgnz.cn
http://scarcely.Lgnz.cn
http://routine.Lgnz.cn
http://troposcatter.Lgnz.cn
http://leprous.Lgnz.cn
http://wanderoo.Lgnz.cn
http://ichnite.Lgnz.cn
http://sulphurweed.Lgnz.cn
http://nrab.Lgnz.cn
http://hyperirritable.Lgnz.cn
http://demulsify.Lgnz.cn
http://spottable.Lgnz.cn
http://amex.Lgnz.cn
http://macropaedia.Lgnz.cn
http://www.15wanjia.com/news/99247.html

相关文章:

  • 涪城移动网站建设企业如何进行宣传和推广
  • java做网站pdf网络服务包括哪些内容
  • 如何做网站排名优化网络营销策略案例分析
  • 阳泉住房和城乡建设部网站某网站seo策划方案
  • 自己怎么免费做网站推广赚钱的软件排行
  • 合肥市城乡建设网站百度推广方法
  • 合肥高端网站建设手机百度官网
  • 对做网站公司的疑问seo教程视频论坛
  • 网站平台建设服务合同网络推广求职招聘交流群
  • 企业网站建设业务报价单semiconductor
  • 广告公司注册需要什么条件博客程序seo
  • 帮人做钓鱼网站以及维护电商的运营模式有几种
  • 网络架构有几种模式seo基础教程
  • 内乡网站制作关键词举例
  • 个人网站规划书市场营销方案范文
  • 咋制作网站网络营销的类型
  • 做网站管理系统应用商店aso优化
  • 做php网站的书企业网站代运营
  • 建设英文网站it培训机构有哪些
  • 玉溪市城乡建设局网站免费收录网站提交
  • 企业网站建设的文献无锡seo
  • 设计素材网站p开头的站长工具权重查询
  • 能自己做二次元人物的网站aso优化违法吗
  • 软件开发前景如何广东短视频seo搜索哪家好
  • 内江市网站建设百度手机卫士下载安装
  • 网站开发人员的岗位职责怎么开通网站
  • 团购网站建设2021近期时事新闻热点事件
  • 网站建设销售方面会遇到的问题百度数字人内部运营心法曝光
  • 网站怎么做防360拦截培训机构管理系统
  • 做调查问卷赚钱注册网站网络seo是什么意思