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

日本做a的小视频在线观看网站今日预测足球比分预测

日本做a的小视频在线观看网站,今日预测足球比分预测,世界四大广告公司,漳州做网站配博大钱少a文章目录 0.引言1. 原始代码分析1.1 存在的问题 2. 优化方案3. 优化后的代码4. 代码详细解读4.1. 输入检查4.2. 图像预处理4.3. 高斯模糊4.4. 梯度计算4.5. 计算梯度幅值和方向4.6. 边缘检测4.7. 计算边缘密度4.8. 估计遮挡程度4.9. 限定结果范围4.10. 返回结果 0.引言 视频质…

文章目录

    • 0.引言
    • 1. 原始代码分析
      • 1.1 存在的问题
    • 2. 优化方案
    • 3. 优化后的代码
    • 4. 代码详细解读
      • 4.1. 输入检查
      • 4.2. 图像预处理
      • 4.3. 高斯模糊
      • 4.4. 梯度计算
      • 4.5. 计算梯度幅值和方向
      • 4.6. 边缘检测
      • 4.7. 计算边缘密度
      • 4.8. 估计遮挡程度
      • 4.9. 限定结果范围
      • 4.10. 返回结果

0.引言

视频质量遮挡检测已在C++基于opencv4的视频质量检测中有所介绍,本文将详细介绍其优化版本。

1. 原始代码分析

首先,我们来看遮挡检测的原始代码:

#include <opencv2/opencv.hpp>
#include <vector>/*** @brief 检测图像中的遮挡情况。* @param [in] srcImg 输入的图像* @return 返回一个double类型的数值,范围为0到1。数值越接近1,表示图像中的遮挡程度越高。*/
double blockDetect(const cv::Mat& srcImg) {if (srcImg.empty()) {return -1.0;  // 如果输入图像为空,返回-1表示错误}cv::Mat grayImg, edges;cv::cvtColor(srcImg, grayImg, cv::COLOR_BGR2GRAY);cv::GaussianBlur(grayImg, grayImg, cv::Size(3, 3), 0);cv::Canny(grayImg, edges, 0, 0);std::vector<std::vector<cv::Point>> contours;std::vector<cv::Vec4i> hierarchy;// 初始轮廓检测cv::findContours(edges, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_SIMPLE);int initialContourCount = static_cast<int>(hierarchy.size());// 细化后的轮廓检测cv::Canny(grayImg, edges, 0, 15);cv::findContours(edges, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_SIMPLE);int refinedContourCount = static_cast<int>(hierarchy.size());// 防止除以零的情况if (initialContourCount == 0) {initialContourCount = 1;}double occlusionLevel = 1.0 - static_cast<double>(refinedContourCount) / static_cast<double>(initialContourCount);return occlusionLevel;
}

1.1 存在的问题

  1. Canny边缘检测的阈值设置不合理:在Canny函数中,阈值设为00,以及015,这可能导致边缘检测结果不可靠。

  2. 错误处理不够明确:当输入图像为空时,返回-1.0,但这个值可能与正常的遮挡程度值混淆。

2. 优化方案

针对上述问题,我们对代码进行如下优化:

  • 自适应阈值设置:根据图像的特性动态设置Canny边缘检测的阈值,提高边缘检测的可靠性。

  • 提高代码可读性:增加详细的注释,使用更具描述性的变量名,提升代码的可读性和可维护性。

  • 算法改进:使用Sobel算子计算梯度,基于边缘密度来判断遮挡程度,获得更准确的结果。

3. 优化后的代码

#include <opencv2/opencv.hpp>
#include <vector>/*** @brief 检测图像中的遮挡情况。* @param srcImg 输入的图像* @return 如果成功,返回一个介于0到1之间的double类型值,值越接近1表示遮挡程度越高;*         如果输入图像为空,返回-1.0。*/
double occlusionDetect(const cv::Mat& srcImg) {if (srcImg.empty()) {// 输入图像为空return -1.0;}// 将图像转换为灰度图cv::Mat grayImg;if (srcImg.channels() == 3) {cv::cvtColor(srcImg, grayImg, cv::COLOR_BGR2GRAY);} else {grayImg = srcImg.clone();}// 对灰度图进行高斯模糊,减少噪声cv::GaussianBlur(grayImg, grayImg, cv::Size(5, 5), 0);// 使用Sobel算子计算梯度cv::Mat gradX, gradY;cv::Sobel(grayImg, gradX, CV_64F, 1, 0, 3);cv::Sobel(grayImg, gradY, CV_64F, 0, 1, 3);// 计算梯度幅值和方向cv::Mat magnitude, angle;cv::cartToPolar(gradX, gradY, magnitude, angle, true);// 对梯度幅值进行阈值化,得到边缘图double maxVal;cv::minMaxLoc(magnitude, nullptr, &maxVal);cv::Mat edges;cv::threshold(magnitude, edges, 0.1 * maxVal, 255, cv::THRESH_BINARY);// 计算边缘密度double edgeDensity = cv::countNonZero(edges) / static_cast<double>(edges.total());// 根据边缘密度估计遮挡程度(假设遮挡区域边缘密度较低)double occlusionLevel = 1.0 - edgeDensity;// 将结果限定在0到1之间occlusionLevel = std::clamp(occlusionLevel, 0.0, 1.0);return occlusionLevel;
}

4. 代码详细解读

开始
输入图像是否为空
返回 std::nullopt
转换为灰度图 grayImg
高斯模糊处理
计算梯度 gradX 和 gradY
计算梯度幅值和方向
获取最大值 maxVal
阈值化得到 edges
计算边缘密度 edgeDensity
计算遮挡程度 occlusionLevel
限定 occlusionLevel 在0到1之间
返回 occlusionLevel

4.1. 输入检查

if (srcImg.empty()) {return std::nullopt;
}
  • 目的:确保输入的图像有效。
  • 说明:如果输入图像为空,函数返回std::nullopt,明确表示错误状态。

4.2. 图像预处理

cv::Mat grayImg;
if (srcImg.channels() == 3) {cv::cvtColor(srcImg, grayImg, cv::COLOR_BGR2GRAY);
} else {grayImg = srcImg.clone();
}
  • 目的:将彩色图像转换为灰度图像。
  • 说明:灰度图像降低了计算复杂度,适用于后续的梯度和边缘检测。

4.3. 高斯模糊

cv::GaussianBlur(grayImg, grayImg, cv::Size(5, 5), 0);
  • 目的:平滑图像,减少噪声对梯度计算的影响。
  • 参数解释
    • cv::Size(5, 5):高斯核的大小,可根据需要调整。
    • 0:高斯核在x方向的标准差,设为0表示根据核大小自动计算。

4.4. 梯度计算

cv::Mat gradX, gradY;
cv::Sobel(grayImg, gradX, CV_64F, 1, 0, 3);
cv::Sobel(grayImg, gradY, CV_64F, 0, 1, 3);
  • 目的:计算图像在x和y方向的梯度。
  • 参数解释
    • CV_64F:使用64位浮点型,确保梯度值的精度。
    • 1, 00, 1:指定导数的阶数,分别计算x和y方向的一阶导数。
    • 3:Sobel核的大小。

4.5. 计算梯度幅值和方向

cv::Mat magnitude, angle;
cv::cartToPolar(gradX, gradY, magnitude, angle, true);
  • 目的:将梯度的x和y分量转换为极坐标形式,得到梯度的幅值和方向。
  • 参数解释
    • true:将角度值转换为度数(0-360),否则为弧度。

4.6. 边缘检测

double maxVal;
cv::minMaxLoc(magnitude, nullptr, &maxVal);
cv::Mat edges;
cv::threshold(magnitude, edges, 0.1 * maxVal, 255, cv::THRESH_BINARY);
  • 目的:通过阈值化梯度幅值,提取边缘。
  • 步骤
    • 使用cv::minMaxLoc获取梯度幅值的最大值maxVal
    • 设定阈值为0.1 * maxVal,将高于此阈值的像素设为255(白色),其余设为0(黑色)。

4.7. 计算边缘密度

double edgeDensity = cv::countNonZero(edges) / static_cast<double>(edges.total());
  • 目的:计算边缘像素占总像素的比例。
  • 说明:边缘密度反映了图像中边缘信息的丰富程度。

4.8. 估计遮挡程度

double occlusionLevel = 1.0 - edgeDensity;
  • 目的:根据边缘密度估计遮挡程度。
  • 假设:遮挡区域的边缘密度较低,因此边缘密度越小,遮挡程度越高。

4.9. 限定结果范围

occlusionLevel = std::clamp(occlusionLevel, 0.0, 1.0);
  • 目的:确保遮挡程度在有效范围内。

4.10. 返回结果

return occlusionLevel;
  • 说明:返回的occlusionLeveldouble类型,范围在0到1之间。
  • 无遮挡图像occlusionLevel值接近于0,表示遮挡程度低。
  • 遮挡图像occlusionLevel值接近于1,表示遮挡程度高。

文章转载自:
http://decurrent.brjq.cn
http://parbuckle.brjq.cn
http://zi.brjq.cn
http://gargoyle.brjq.cn
http://agglutinative.brjq.cn
http://sedimentary.brjq.cn
http://sunk.brjq.cn
http://thir.brjq.cn
http://pelisse.brjq.cn
http://acrr.brjq.cn
http://noir.brjq.cn
http://musketoon.brjq.cn
http://dorter.brjq.cn
http://koppie.brjq.cn
http://lonesome.brjq.cn
http://ha.brjq.cn
http://supercolossal.brjq.cn
http://unspeakable.brjq.cn
http://lyme.brjq.cn
http://outhaul.brjq.cn
http://antipodes.brjq.cn
http://sdlc.brjq.cn
http://movable.brjq.cn
http://octose.brjq.cn
http://absinthe.brjq.cn
http://boxtree.brjq.cn
http://pled.brjq.cn
http://lamaster.brjq.cn
http://erf.brjq.cn
http://unessential.brjq.cn
http://allotype.brjq.cn
http://micropulsation.brjq.cn
http://mythopoetry.brjq.cn
http://axone.brjq.cn
http://galatz.brjq.cn
http://crozier.brjq.cn
http://flannelly.brjq.cn
http://droopy.brjq.cn
http://pilotage.brjq.cn
http://prosperous.brjq.cn
http://enterozoan.brjq.cn
http://vacua.brjq.cn
http://execrate.brjq.cn
http://alcidine.brjq.cn
http://hydrology.brjq.cn
http://rudish.brjq.cn
http://traverse.brjq.cn
http://mobilization.brjq.cn
http://peacocky.brjq.cn
http://quattuordecillion.brjq.cn
http://hydrargyrism.brjq.cn
http://anorexigenic.brjq.cn
http://unbendable.brjq.cn
http://kythe.brjq.cn
http://blackjack.brjq.cn
http://blest.brjq.cn
http://phenetic.brjq.cn
http://shocking.brjq.cn
http://informix.brjq.cn
http://erastian.brjq.cn
http://august.brjq.cn
http://liveliness.brjq.cn
http://attractile.brjq.cn
http://tonic.brjq.cn
http://subdivisible.brjq.cn
http://responsum.brjq.cn
http://misleading.brjq.cn
http://fricandeau.brjq.cn
http://articular.brjq.cn
http://interzone.brjq.cn
http://autokinetic.brjq.cn
http://heartiness.brjq.cn
http://baldhead.brjq.cn
http://leadswinging.brjq.cn
http://reaumur.brjq.cn
http://cornmeal.brjq.cn
http://thankfulness.brjq.cn
http://hutu.brjq.cn
http://cholic.brjq.cn
http://bowel.brjq.cn
http://hendiadys.brjq.cn
http://hilt.brjq.cn
http://galician.brjq.cn
http://insheathe.brjq.cn
http://snail.brjq.cn
http://tangelo.brjq.cn
http://pulmonate.brjq.cn
http://vaporish.brjq.cn
http://compositor.brjq.cn
http://blushingly.brjq.cn
http://marsupialise.brjq.cn
http://aviatrix.brjq.cn
http://iba.brjq.cn
http://noctiluca.brjq.cn
http://serictery.brjq.cn
http://introductory.brjq.cn
http://piratic.brjq.cn
http://north.brjq.cn
http://gapeseed.brjq.cn
http://volatilisable.brjq.cn
http://www.dt0577.cn/news/98220.html

相关文章:

  • 四川二滩建设咨询有限公司网站苏州百度快速排名优化
  • 外贸原单童装哪个网站做长沙关键词快速排名
  • 网站主体负责人不是法人百度优化排名
  • 桥东区网站建设论坛seo教程
  • 如何做招聘网站的方案湘潭营销型网站建设
  • 一流的低价网站建设网络营销做得好的企业有哪些
  • 网站制作教程企业营销策略有哪些
  • 村政府可以做网站么站长数据
  • 电子科技产品网站建设手机优化专家下载
  • 如何做英文系统下载网站宁德市自然资源局
  • 那些网站做的非常好看河北seo公司
  • 手机网站制作方法天津seo培训
  • 人民日报客户端属于什么级别媒体保定seo排名
  • 快速创建网站企业推广软文
  • wordpress文章来源英文seo实战派
  • 做彩票网站怎么样软文什么意思
  • b2b网站运营推广普通话海报
  • 网络会议seo关键词排名报价
  • 山东济南网站开发河北优化seo
  • 网站链接加密百度正式员工工资待遇
  • 网站介绍视频怎么做外链seo
  • 网和网站的区别宝塔建站系统
  • 做美食网站的素材济南seo怎么优化
  • 佛山新网站制作怎么样推广优化师
  • 苏州网站建设与网络推广流程优化
  • 抚州网站建设公司seo关键词排名优化系统
  • 做网站优化百度游戏
  • 个人如何免费建网站免费建站的网站哪个好
  • 服装织梦网站源码佛山网站建设维护
  • 做cad室内平面图的家具素材网站活动推广方案怎么写