自动试玩 - 识别虚线框

html 图像加虚线框的方法 图像加虚线框的方法,csS及原文件下载研究 立即下载

识别虚线框


QQ 282397369

需求

老革命碰到新问题,用户发现在试玩的时候,有一个平台需要按住虚框进行操作,目前的脚本还没有这个功能,需要实现一下下。
不怕客户没爱好,就怕客户没需求。
在这里插入图片描述

实现

首先是颜色过滤,然后找连通域,再拼成矩形框数据。当然,矩形框数据只需找上下左右4个坐标分量,这个可以通过投影找最大两个数值来确定。
核心实现,肯定还得C来
考虑实用性,把二值化这个步骤用字符串来参数化,这样就可以实现彩色、灰度、通道方式过滤。
先设计一个函数:

TRect __fastcall CvHelper::GetRect_Dash(cv::Mat& srcMat, UnicodeString binaryMethod) {
	TRect result(-1, -1, -1, -1);
	UnicodeString type = THelper::String::GetStringAt(binaryMethod, L",", 0).Trim();
	UnicodeString value1 = THelper::String::GetStringAt(binaryMethod, L",", 1).Trim();
	UnicodeString value2 = THelper::String::GetStringAt(binaryMethod, L",", 2).Trim();
	cv::Mat binaryMat;
	int v1 = ::TTypeConvert::Str2Int(value1);
	if(THelper::String::IsSame(L"Color", type, !DRGRAPH_FLAG_SENSITIVE)) {
		if(value2.Length()) {
			int delta = ::TTypeConvert::Str2Int(value2);
			binaryMat = CvHelper::BuildTransMaskMat(srcMat, TColor(v1), delta);
		} else
			binaryMat = CvHelper::BuildTransMaskMat_ColorPass(srcMat, v1);
	} else if(THelper::String::IsSame(L"Gray", type, !DRGRAPH_FLAG_SENSITIVE)) {
		if(value2.Length()) {
			int delta = ::TTypeConvert::Str2Int(value2);
			binaryMat = CvHelper::BuildTransMaskMat(srcMat, BYTE(v1), delta);
		} else
			binaryMat = CvHelper::BuildTransMaskMat_GRAY(srcMat, BYTE(v1));
	} else if(THelper::String::IsSame(L"Channel", type, !DRGRAPH_FLAG_SENSITIVE)) {
		NChannelType channel = THelper::String::IsSame(L"RED", value1, !DRGRAPH_FLAG_SENSITIVE) ? nctRed :
							   THelper::String::IsSame(L"BLUE", value1, !DRGRAPH_FLAG_SENSITIVE) ? nctBlue : nctGreen;
		int delta = ::TTypeConvert::Str2Int(value2);
		binaryMat = CvHelper::BuildTransMaskMat_Channel(srcMat, channel, delta);
	}
	if(binaryMat.empty())
		return result;
	CvHelper::Debug::LogMat(srcMat, L"虚线框识别 - 原图");
	CvHelper::Debug::LogMat(binaryMat, L"虚线框识别 - 二值图");
	CvRects rects = CvHelper::GetAllDomain(binaryMat, nssX, L"", CV_RETR_LIST);
	CvHelper::Debug::LogMatWithRects(srcMat, rects);
	int * rowValue = new int[srcMat.rows];
	int * colValue = new int[srcMat.cols];
	ZeroMemory(rowValue, srcMat.rows * sizeof(int));
	ZeroMemory(colValue, srcMat.cols * sizeof(int));
	for(int i = rects.size() - 1; i >= 0; --i) {
		CvRect r = rects[i];
		if(r.height > maxLength || r.width > maxLength)
			rects.erase(rects.begin() + i);
		else {
			int x = r.x + r.width / 2;
			int y = r.y + r.height / 2;
			rowValue[y] += 1;
			colValue[x] += 1;
		}
	}
	int left = localGetMaxIndex(colValue, srcMat.cols);
	int right = -1;
	if(left >= 0) {
		colValue[left] = 0;
		right = localGetMaxIndex(colValue, srcMat.cols);
	}
	int top = GetMaxIndex(rowValue, srcMat.rows);
	int bottom = -1;
	if(top >= 0) {
		rowValue[top] = 0;
		bottom = GetMaxIndex(rowValue, srcMat.rows);
	}
	delete rowValue;
	delete colValue;
	if(left < 0 || right < 0 || top < 0 || bottom < 0)
		return result;
	result.left = std::min(left, right);
	result.top = std::min(top, bottom);
	result.right = std::max(left, right);
	result.bottom = std::max(top, bottom);
	CvHelper::Debug::LogMatWithRects(srcMat, rects);
	return result;
}

经测试,可以正确识别出虚线框
在这里插入图片描述

LUA调用

增加一个API函数GetRect_Dash供LUA调用,返回矩形区域即可。

	local t, x, y, w, h = cv:GetRect_Dash(realTimeMat, "Channel, BLUE, 80")
	if(x > 0) then
		Click(string.format("%d, %d", x + w / 2, y + h / 2))
	end

结果:
在这里插入图片描述
如此甚好。

H3C BGP联盟实验 bgp,bgp联盟,bgp公认团体属性, 阅读详情

相关推荐

【Unity】Pico VR 开发实战:从环境搭建到交互实现

本文是一份详细的Unity Pico VR开发实战指南,涵盖从环境搭建到核心交互实现的全流程。详细讲解了如何集成Pico Unity Integration SDK与XR Interaction Toolkit,配置开发环境,并重点解析了手柄输入处理、射线交互以及VR UI操作三大核心模块的代码实现与优化技巧,帮助开发者快速上手Pico VR应用开发。

rice5的博客 1177

latex 表格中虚线_如何识别和修复表格识别中的虚线

latex 表格中虚线When documents are digitalized via scanning or via photo, the image quality can suffer from wrong settings or bad conditions. In the case of table recognition, this can lead to a broken tab...

weixin_26752765的博客 1581

【模拟IC】从VCD到VEC:Cadence数模混合仿真中高效激励转换与HSIM工具链实战

本文详细解析了在Cadence数模混合仿真中,如何利用HSIM工具链的vcd2vec命令,将数字仿真生成的VCD文件高效转换为模拟仿真器所需的VEC格式激励文件。文章提供了从VCD文件预处理、io_top.sig文件编写、核心命令参数详解到Cadence ADE环境集成验证的全链路实战指南,并分享了自动化脚本方案,旨在解决数模混合验证中的“语言不通”难题,提升仿真效率。

k9l0m1的博客 123

基于ESP Net 的车道线识别+可行驶区域识别算法,即是卖价,可以直接联系。 车道线识别准确...

车道线识别和可行驶区域检测一直是自动驾驶领域的热门话题。最近实测了基于ESP Net的方案,实测车道线识别准确率能到93%,虽然mIoU(31%)看起来有点迷,但实际道路测试中发现主要是由于车道线与背景像素比例悬殊导致的统计偏差。训练时采用渐进式学习策略,前50轮专注可行驶区域(学习率3e-4),后50轮加入车道线联合训练(学习率衰减到1e-4)。基于ESP Net 的车道线识别+可行驶区域识别算法,即是卖价,可以直接联系。基于ESP Net 的车道线识别+可行驶区域识别算法,即是卖价,可以直接联系。

eniETIUz的博客 472

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3791

2-6-1-1 QNX编程入门之进程和线程(一)

文章围绕进程和线程展开介绍。先是将进程类比为房子,线程类比为居住者,阐述其基本概念,如进程占用内存,线程可共享内存。接着讲解同步相关内容,介绍了互斥,线程通过互斥锁来控制对特定资源的访问,像使用浴室一样。还提到优先级,线程按优先级和等待时长来决定获取资源顺序。此外,说明了信号量,以厨房为例,区分计数为 1 和大于 1 的信号情况,且指出信号量可当互斥锁用,但互斥锁是特殊用途信号量,二者存在区别,最后提及后续会介绍其他同步机制。

星原飞火的博客 1324

Kneed曲线拐点检测终极指南:从Kneedle算法原理到自动化实战

在做 K-means 聚类时,你一定遇到过这样的纠结:簇数 k 到底取几?画出的"簇数—误差"曲线是条平滑的下降弧线,没有明显的折角,肉眼盯半天也只能给个"大概 4 或者 5"的模糊答案。kneed 正是为这类场景而生的 Python 库——它基于 Kneedle 算法,把"曲线从快速下降到缓慢变化"的那个临界点(Knee Point,也叫拐点或肘点)自动算出来,帮你把主观目测变成可复现的数字。

gitblog_00081的博客 706

国赛数学建模高教社杯历届优秀论文全集

包含了2004到2023年高教社的赛题及优秀论文。

BanDeng001的博客 3288

自定义带取景框的camera

前言:公司项目需求,在图像信息采集时只采集肩部以上部位的图片(和我们平时的一寸证件照很像),首先想到的是用第三方的图片选择器,他们都自带裁剪功能,不过每次拍完照后的手动裁剪,结果老大说简化业务人员的操作,不过这也难不倒无所不能的程序猿,没有咱们可以new一个(女朋友)。言归正传,开启我们的自定义带取景框的camera... 转载链接:https://blog.youkuaiyun.com/ruancw/ar...

ruancw的博客 7485

阅文集团大数据面试题及参考答案

在 Flink 中,watermark 是一种用于处理乱序事件时间的机制。实现接口:通常需要实现 AssignerWithPeriodicWatermarks 或 AssignerWithPunctuatedWatermarks 接口。前者会周期性地生成 watermark,后者则是基于某些特定事件来生成 watermark ,比如接收到某个特定值的消息时。定义位置:可以在数据源处或者在流处理的中间操作中定义 watermark。在数据源定义时,能更精准地根据数据的产生特性设置 watermark;

大模型大数据攻城狮的专栏 1089

码农新宠大对决:GitHub Copilot、通义灵码和CodeLlama谁主沉浮?

本文对三款主流AI编程工具GitHub Copilot、通义灵码和CodeLlama进行了全面对比分析。GitHub Copilot在多语言支持和代码质量上表现突出;通义灵码在中文理解和阿里云生态集成方面优势明显;CodeLlama则以开源可定制见长。文章从代码生成、理解能力、多语言支持、使用体验等维度展开评测,并结合实际案例说明不同开发者群体的适用选择。建议新手可优先考虑通义灵码,经验开发者适合GitHub Copilot,而有定制需求的企业团队则可选择CodeLlama。随着AI技术发展,这些工具将持续

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 675

去除OCR中的虚线

原图如下 处理代码 #include&lt;iostream&gt; #include&lt;opencv.hpp&gt; using namespace cv; using namespace std; /* 函数功能:在输入图像中找一条直线 输入输出:输入的图像是灰度图raw,返回值为dst,返回值是一条白色的线 lines = cvHoughLines2(canny, stor,...

ANDY 1305

LDRA Testbed软件静态分析_操作指南

从本文起,将开始LDRA Testbed(TBrun)教程的系列文章,包括软件静态分析、单元测试、集成测试,以及基于Testbed的自动化工具开发、持续集成、常见问题解答等。LDRA公司是专业的软件测试工具与测试技术、咨询服务提供者,其总部位于英国利物浦。其旗舰产品Testbed/TBrun功能全面、易于使用,不仅适合于主机平台软件测试,同时适合于嵌入式软件测试。不仅能进行软件静态测试,还能进行软件单元测试、软件集成测试,在白盒测试领域运用比较广泛。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1万+

python+opencv车道线,实线虚线的检测

最近在做一个基于opencv的无人小车,行车过程中遇到障碍时需要变道,由于实线不能变道,所以要判断车道线。但是找了很多地方却找不到关于车道线的实线虚线检测,于是通过自己的奇思妙想,想到了解决的办法,于是写下此博客,希望能帮到更多的人。 入门版的车道线检测 参考的资料 在此参考代码基础上完成的实线,虚线检测 代码 import cv2 as cv import numpy as np import utils #读取图片 src = cv.imread('test_images/test3.jpg') #高

weixin_45685889的博客 6875

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解

写法 1 只让"自己手里那份"变新,其他持有者停在旧版本,因为它们的槽没有被改过。运行期累积在表上的字段在写法 1 下会一起消失,因为新表是重新执行模块体造出来的,模块体里没有这些字段。写法 2 改的是同一张表,所有持有者同时看到新代码,新表里没有的字段不会覆盖老表上的。写法 2 解决的是一个 VM 内部多处引用的问题,不解决跨服务一次性生效的问题。函数对象没换,但它每次调用都去读槽,所以槽一改,行为就变。写法 1 换掉的是槽里装的东西,老表还在,只是没人指向它。写法 2 不碰槽,改的是表里面的字段。

m0_74234485的博客 283

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Lua 进阶系列】从调用栈查询到 Hook(钩子):一文理解 Lua 虚拟机的事件回调机制

本文深入解析 Lua 的 Hook 机制,揭示其如何在不修改业务代码的前提下,实现函数调用追踪、行级监控与执行控制。通过对比 debug.getinfo() 和 traceback() 的主动查询局限,引出 Hook 的自动触发优势——基于虚拟机执行事件(call/return/line/count),结合 debug.sethook() 实现解耦式调试。文章以 Reactor 模型类比,阐明 Hook 的事件驱动本质,并梳理注册对象(线程)、监听内容与回调分发逻辑,为工程化调试提供高效方案。

努力努力再努力wz的博客 757

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

设计一套生产级 API 接口:从契约、安全、幂等到限流,我踩过的坑都在这了

上周帮朋友做模拟面试,被问到一道老牌场景题:"如果让你从零设计一套对外开放的 API 接口,你会怎么做?"这题几乎是大厂后端面试的必考题,但大部分人答不好——要么上来就堆 `@PostMapping`,要么把 RESTful 八股背一遍就完事。我在实际项目里从零搭过两套开放平台,也救过不少"接口裸奔"的火,这篇文章就把完整的答案拆开揉碎讲清楚:从设计原则、契约规范,到安全、幂等、限流、可观测,每个点都配上生产可用的代码。无论你是准备面试,还是真的要给团队搭一套 API,这篇都能直接用。

xiaokjv的博客 250

Skynet 热更新三条通道:clearcache、inject、injectcode 的粒度与代价

从日志里找出报错时的服务地址和文件行号,确认要改的是哪个服务里的哪个模块。还有一个容易忽略的限制:它收集的是「函数的 upvalue 里的 table」。在 A 里执行一次模块 reload,A 变,B 不变——B 是另一个 VM,它那份表从头到尾没被碰过。局部变量在栈帧上,不挂在任何函数的 upvalue 里,收集不到。在 skynet 里做热更,先要分清"没生效"是哪一层断的:文件没被读到、模块没重新 require、还是补丁没送到目标服务。要一次覆盖全部服务,只有重启进程,或者把每个服务都执行一遍。

m0_74234485的博客 321

【政安晨】嵌入式AI开发实践 —— ESP-Claw 深度拆解:把 AI Agent 塞进 $5 芯片,它是怎么“看见“并“握住“硬件的

最近一个月,我几乎把 Espressif 新推的 ESP-Mosaico 开发板(2026-10-20 发布,基于全新 RISC-V 双核 ESP32-S31)和它背后的 ESP-Claw 智能体框架翻了三遍——官网、GitHub 全部 6 个仓库、ESP-Claw 官方文档,外加 arXiv 上端侧 Agent 的几篇论文。ESP-Claw 不是"在 ESP32 上跑大模型",而是把大模型当成一个会下棋但棋力不稳的对手——能算的地方绝不让它算,不能算的地方只许它走一个格。

政安晨——致力于AI人工智能数字互动领域 342

Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制

Lua是轻量级可嵌入脚本语言,Redis内置Lua5.1解释器,支持通过EVAL或SCRIPTLOAD执行脚本,实现多命令原子操作。利用redis.call()调用Redis命令,结合KEYS和ARGV传参,可将读取、判断、更新等操作封装为原子逻辑,有效避免限流中的竞态条件。固定窗口限流通过Lua脚本实现计数与过期控制,保证操作连续性。但脚本不可回滚,需避免复杂逻辑;执行时间过长会阻塞Redis,且需满足Cluster哈希槽约束。实际应用中还需考虑故障降级策略。

Joy T的博客 148

【Lua进阶系列】Lua 调试机制详解:从虚拟机调用栈、错误传播到 debug 库

本文深入解析 Lua 调试机制的底层原理,强调调试并非重新执行程序,而是利用虚拟机已维护的运行时状态与编译阶段保留的调试信息。通过分析函数调用栈、字节码与源码行号映射关系,揭示 debug 库函数(如 getinfo、getlocal、traceback)如何读取调用链与局部变量。同时说明错误传播机制及 pcall/xpcall 的保护作用,并指出剥离调试信息虽可减小文件体积,但会削弱调试能力。核心在于理解:调试是基于虚拟机运行时状态与编译辅助信息的协同结果。

努力努力再努力wz的博客 282

【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制

本文从游戏服务端分层架构出发,解析 Lua 中 userdata 的设计意义。尽管 Lua 有 Table 可模拟对象,但 userdata 专为承载 C/C++ 自定义数据而生,实现 Lua 与原生代码间高效、安全的数据交互。通过 TValue 与 Udata 机制,区分 Full 与 Light userdata,结合元表实现面向对象调用,既保留性能优势,又提升封装性。最终揭示:userdata 是连接脚本层与宿主层的关键桥梁。

努力努力再努力wz的博客 204

Redis Lua 与事务的边界:一次媒体回传进度故障复盘

这次使用 Lua主要是为了把“读取状态、根据结果判断、更新多个数据结构”放到 Redis 内连续执行,避免并发请求插入这些步骤之间。MULTI/EXEC。

weixin_43145829的博客 89
上一篇: 属性编辑器 - 字体设置
下一篇: 按拼音排序
DrGraph
博客等级 码龄14年 228粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值