高噪点灰度图目标粗定位CoraseLocation
高噪点的灰度图目标粗定位
/*
** @name: CoraseLocation
** @brief: 粗定位
** @param:[in] srcGray 灰度图()
** @param:[in] box 目标尺寸(像素)
** @param:[ou] roi 目标定位结果
** @return: true=成功,false=失败
*/
bool CoraseLocation(cv::Mat& srcGray, cv::Size box, cv::Rect& roi){try{if (srcGray.empty()) return false;if (srcGray.channels() != 1) return false;if (box.width < 4 || box.width >= srcGray.cols) return false;if (box.height < 4 || box.height >= srcGray.rows) return false;//roi = cv::Rect(0, 0, srcGray.cols, srcGray.rows);// STEP01: 计算影像平均灰度与标准差cv::Scalar meanVal, devVal;cv::meanStdDev(srcGray, meanVal, devVal);// STEP02: 计算积分图(寻找目标:亮区或暗区)cv::Mat srcInte;cv::integral(srcGray, srcInte, CV_64F);// STEP03: 寻找亮区和暗区cv::Point ptMin(-1, -1), ptMax(-1, -1);double valMin = DBL_MAX, valMax = DBL_MIN;for (int y = 0; y < srcInte.rows - box.height; y += box.height / 2){for (int x = 0; x < srcInte.cols - box.width; x += box.width / 2){double left_top = srcInte.at<double>(y, x);double left_bottom = srcInte.at<double>(y + box.height, x);double right_top = srcInte.at<double>(y, x + box.width);double right_bottom = srcInte.at<double>(y + box.height, x + box.width);//double valBox = right_bottom - left_bottom - right_top + left_top;if (valMin > valBox){valMin = valBox;ptMin.x = x + 1;ptMin.y = y + 1;}if (valMax < valBox){valMax = valBox;ptMax.x = x + 1;ptMax.y = y + 1;}}}valMin /= box.area();valMax /= box.area();// STEP04: 判断目标是亮区还是暗区,并重新转换为二值图bool isWhiteMark = false;cv::Mat srcBin;if (abs(valMin - meanVal[0]) > abs(valMax - meanVal[0])){// valmin: mark为暗roi = cv::Rect(ptMin.x, ptMin.y, box.width, box.height);isWhiteMark = false;cv::threshold(srcGray, srcBin, valMin - devVal[0], 255, cv::THRESH_BINARY_INV);}else {// valmax: mark为亮roi = cv::Rect(ptMax.x, ptMax.y, box.width, box.height);isWhiteMark = true;cv::threshold(srcGray, srcBin, valMax + devVal[0], 255, cv::THRESH_BINARY);}// STEP05: 根据二值图,调整目标区域std::vector<std::vector<cv::Point>> contours;cv::findContours(srcBin, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);valMax = DBL_MIN;int idxMax = -1;for (int i = 0; i < contours.size(); ++i){auto area = cv::contourArea(contours[i]);if (valMax < area){valMax = area;idxMax = i;}}if (idxMax < 0){return -1;}// STEP06: 输出拟合后的目标区域roi = cv::boundingRect(contours[idxMax]);return true;}catch (...){}return false;
}
效果:
相关文章:
高噪点灰度图目标粗定位CoraseLocation
高噪点的灰度图目标粗定位 /* ** name: CoraseLocation ** brief: 粗定位 ** param:[in] srcGray 灰度图() ** param:[in] box 目标尺寸(像素) ** param:[ou] roi 目标定位结果 ** return: true成功,false…...
Android:Google三方库之Firebase集成详细步骤(二)
Analytics分析 1、将 Firebase 添加到您的 Android 项目(如果尚未添加),并确保在 Firebase 项目中启用了 Google Analytics(分析): 如果您要创建新的 Firebase 项目,请在项目创建过程中启用 G…...
java使用freemarker模板生成html,再生成pdf
1.freemarker模板生成html 添加Maven依赖 在pom.xml文件中添加以下依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>创建Freemarker…...
图解系列--Web服务器,Http首部
1.用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。。比如,提供 Web 托管服务(Web Hosting Service)的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不…...
直线(蓝桥杯)
直线 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…...
Android:从源码看FragmentManager如何工作
一个Activity中,在某一个容器中,更换不同的Fragment,从而显示不同的界面,这个场景相信大家已经非常熟悉了,也知道Activity是通过FragmentManager来管理嵌入的Fragments的,所以今天就来看看FragmentManager是…...
LabVIEW通过编程将图形类控件的X轴显示为时间戳
LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点,可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW,这些属性节点无法在同一个位置找到。请参阅以下部分,了解特定版本LabVIEW的相关属性节点的位置。 …...
Spring Boot进行单元测试,一个思路解决重启低效难题!
所谓单元测试就是对功能最小粒度的测试,落实到JAVA中就是对单个方法的测试。 junit可以完成单个方法的测试,但是对于Spring体系下的web应用的单元测试是无能为力的。因为spring体系下的web应用都采用了MVC三层架构,依托于IOC,层级…...
c/c++ header_only 头文件实现的关键点
header_only 头文件实现的关键点 ------------------------------------------------------------------------- author: hjjdebug date: 2023年 11月 28日 星期二 16:58:38 CST descriptor: header_only 头文件实现的关键点1. 对外声明的函数必需加上inline, 消除连接的歧义…...
Linux(CentOS7.5):通过docker安装redis
一、准备配置文件 在宿主机,准备映射配置文件的目录下,运行如下: wget http://download.redis.io/redis-stable/redis.conf二、安装 docker run \ --restartalways \ --log-opt max-size100m \ --log-opt max-file2 \ -p 6380:6379 \ -v /opt…...
唯创知音WT588F02B-8S语音芯片:灵活更换语音内容,降低开发成本与备货压力
在电子产品的开发阶段,语音芯片的选择与使用对于产品的功能、成本和上市时间都有着重要影响。唯创知音的WT588F02B-8S语音芯片以其独特的优势,成为工程师们的理想选择,尤其在样品阶段,它为工程师提供了自行更换语音内容的便利&…...
git的创建以及使用
1、上传本地仓库 首先确定项目根目录中没有.git文件,有的话就删了,没有就下一步。在终端中输入git init命令。注意必须是根目录! 将代码存到暂存区 将代码保存到本地仓库 2、创建git仓库 仓库名称和路径(name)随便写…...
面试笔记--Linux常用命令
文件和目录操作: ls: 列出目录内容 例子:ls -l - 列出详细信息,包括权限、所有者等 cd: 切换目录 例子:cd Documents - 进入 “Documents” 目录 pwd: 显示当前工作目录 例子:pwd - 显示当前工作目录的路径 cp: 复制文…...
【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核任务中断)、与硬件的关系实现
文章目录 一、为什么要学习μC/OS-III二、嵌入式操作系统的发展历史三、实时操作系统的特点四、基本概念1. 前后台系统2. 操作系统3. 实时操作系统(RTOS)4. 内核5. 任务6. 任务优先级7. 任务切换8. 调度9. 非抢占式(合作式)内核10…...
在easyswoole 中,配置文件如何加载外部配置
在一个项目中 目录结构是这样的 网站的公共配置,包括一些数据库连接配置,redis连接配置 /web/config/redis_config.php/web/config/mysql_config.php 下面是Easyswoole 项目目录 所有的配置均放在ES项目中的Config目录中 文件名且采用大驼峰命名。如…...
小程序微信支付API?以及参数有哪些
微信小程序支付API有两个,分别是 wx.chooseWXPay 和 wx.pay。 wx.chooseWXPay 是用于唤起微信支付的API,它支持扫码支付、JSAPI支付、APP支付等。它返回一个Promise对象,可以在then方法中处理支付结果。 wx.pay 是用于发起微信支付的API&am…...
【算法】一个简单的整数问题(树状数组、差分)
题目 给定长度为 N 的数列 A,然后输入 M 行操作指令。 第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。 第二类指令形如 Q x,表示询问数列中第 x 个数的值。 对于每个询问,输出一个整数表示答案。 输入格式 第一行…...
Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决
背景 书接上回: Android flutter项目 启动优化实战(一)使用benchmark分析项目 已经分析出了问题: 1.缩短总时长(解决黑屏问题、懒启动、优化流程)、2.优化启动项(使用App Startup)、3.提升用…...
Java---权限修饰符、final、static
文章目录 1. 权限修饰符2. final(最终态)3. static(静态) 1. 权限修饰符 修饰符同一个类中同一个包中的子类和无关类不同包的子类不同包的无关类private√默认√√protected√√√public√√√√ 2. final(最终态) 1. final关键字是最终的意思,可以修饰成员方法、…...
unity实时保存对象的位姿,重新运行程序时用最后保存的数据给物体赋值
using UnityEngine; using System.IO; // using System.Xml.Serialization; public class SaveCoordinates : MonoBehaviour {public GameObject MainObject;//读取坐标private float x;private float y;private float z;private Quaternion quaternion;private void Start(){/…...
RePKG:深度解析Wallpaper Engine资源提取与纹理转换的终极方案
RePKG:深度解析Wallpaper Engine资源提取与纹理转换的终极方案 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 在Wallpaper Engine生态系统中,PKG文件提取和…...
FireRedASR Pro学习笔记整理实战:录音转文字,复习效率翻倍
FireRedASR Pro学习笔记整理实战:录音转文字,复习效率翻倍 1. 为什么你需要这个语音转文字工具 作为一名经常需要听课、参加会议的学习者和职场人士,我一直在寻找能够提升笔记效率的工具。直到遇到FireRedASR Pro,这个基于工业级…...
把 BAPI、RAP 和 Clean Core 接到一条线上,聊透 BAPI 型 RAP Business Object 的可扩展性
在很多真实项目里,最麻烦的场景从来不是 新建一个 RAP BO,而是手里已经有一套跑了很多年的 BAPI,业务规则、消息处理、权限控制、编号逻辑、过账动作,全都压在里面。业务部门又不想推倒重来,只是希望把它接到 SAP Fiori、OData、RAP 这条现代开发链路上,同时还得满足 Cle…...
Wireshark抓包实战:为什么你的网站访问慢了?可能是IPv6 DNS解析在‘捣鬼’
Wireshark抓包实战:IPv6 DNS解析对网站访问速度的影响诊断手册 当用户抱怨"网站打开慢"时,作为技术人员的你首先想到的可能是服务器负载、CDN节点或本地带宽问题。但在双栈网络环境中,一个常被忽视的罪魁祸首正潜伏在DNS解析层——…...
BilibiliDown:三步搞定B站视频下载,打造你的个人离线视频库
BilibiliDown:三步搞定B站视频下载,打造你的个人离线视频库 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.…...
高效管理博德之门3模组:BG3 Mod Manager一站式智能解决方案
高效管理博德之门3模组:BG3 Mod Manager一站式智能解决方案 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 在《博德之门3》的模组世界中…...
LaserGRBL激光雕刻软件:从零开始的完整使用指南
LaserGRBL激光雕刻软件:从零开始的完整使用指南 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为GRBL控制器设计的激光雕刻软件,它为激光雕刻爱好者提供了一…...
琴音落纸,莲心照人 —— 读果修《琴音几人识》有感
在喧嚣奔忙的世间,总有一种灵魂,自带清净与光芒;总有一种文字,不染尘俗,直抵人心。果修居士的诗文集《琴音几人识》,便是这样一部藏着风骨、智慧、慈悲与深情的作品。它不喧哗、不张扬,却如空山…...
Air8101工业引擎:显示、通信与控制的一体化
工业场景中,传统按键屏已逐步被高灵敏度、支持多点触控的电容屏替代,但电容屏开发存在 RGB 接口匹配、触摸 IC 调试等难点,需额外投入工程成本。Air8101 工业引擎可直接适配各类工业电容屏,集成接口匹配、触控调试等功能ÿ…...
Meixiong Niannian画图引擎在IP形象设计中的应用:从草图到高清定稿案例
Meixiong Niannian画图引擎在IP形象设计中的应用:从草图到高清定稿案例 1. 项目概述 Meixiong Niannian画图引擎是一款专为个人GPU设计的轻量化文本生成图像系统,基于先进的Z-Image-Turbo技术底座,深度融合了meixiong Niannian Turbo LoRA微…...
