自动试玩 - 识别虚线框

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

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

使用Anaconda和conda快速搭建YOLO开发环境 本文详细介绍了如何使用Anaconda和conda为YOLO目标检测项目快速搭建独立、纯净的开发环境。通过创建虚拟环境,有效解决了Python包版本冲突和CUDA兼容性问题,并指导安装GPU版PyTorch等核心依赖,最后通过验证脚本确保环境配置成功,为YOLO开发提供了稳定可靠的基础。 阅读详情

相关推荐

基于three.js的室内全景3D展馆案例分享

3D场景展厅

acheng 3559

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

Python + DeepSeek 完美结合:本地部署提效指南

随着生成式 AI 和深度学习技术的快速发展,如何将智能搜索工具与本地部署结合以提升效率成为了许多企业和开发者关注的重点。DeepSeek 是一款开源的智能搜索框架,结合 Python 的灵活性,能够实现高效、可靠的本地部署方案。本文将介绍如何通过 Python 和 DeepSeek 的完美结合,实现本地化部署并提升工作效率。通过将 Python 与 DeepSeek 结合,可以快速实现语义搜索的本地化部署,确保数据安全的同时提升工作效率。文件可直接作为 DeepSeek 的输入数据。

weixin_44872675的博客 1万+

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

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

eniETIUz的博客 472

Excel数字变成了小数点+E+17?这些方法帮你解决!

本文介绍了三种解决Excel中数字变成小数点+E+17问题的方法:通过下拉箭头或右键菜单设置单元格格式为文本、使用TEXT函数将科学计数法转换为文本。这些方法各有优缺点,适用于不同的场景和需求。在实际应用中,我们可以根据具体情况选择合适的方法来解决问题。通过以上方法,我们可以轻松地从繁琐的小数点+E+17问题中解脱出来,更便捷地处理Excel中的数字。希望本文能够帮助到您,让您在使用Excel时更加得心应手!

nntxthml的博客 1247

搞定8GB/s数据流:一个FPGA工程师的XDMA驱动调优实战(附避坑清单)

本文详细记录了FPGA工程师在XDMA驱动调优过程中实现8GB/s高带宽数据流的实战经验。通过优化DDR访问、中断响应、DMA映射等关键环节,解决了PCIE数据采集卡在高带宽场景下的性能瓶颈,并提供了实用的避坑清单和技术方案。

weixin_29194255的博客 203

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

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

gitblog_00081的博客 706

自适应动态规划硕士博士论文学习

强化学习关注随机过程中的序贯决策问题,而自适应动态规划关注动态系统的控制问题。吸引域:系统渐近稳定的区域。

DarlingLSA的博客 1425

自定义带取景框的camera

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

ruancw的博客 7485

OpenHarmony v4.1 Release设置应用随系统自动启动

OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:启用系统的自启动管理支持开发一个系统应用来管理自启动配置。

afufufufu的博客 1902

使用openclaw出现blocked URL fetch (url-fetch) reason=Blocked: resolves to private/internal/special 解决方案

本文主要介绍了使用openclaw出现blocked URL fetch (url-fetch) target=https://news.google.com/search reason=Blocked: resolves to private/internal/special-use IP address 解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

去除OCR中的虚线

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

ANDY 1305

IPGUARD客户端与应用程序冲突

客户端与应用程序冲突 症状 安装客户端之后,客户端的某些程序无法运行或使用过程中出现异常,卸载客户端后恢复正常。 原因分析 可能是客户端的某些功能与应用程序发生冲突导致。 解决方法 当出现这样的情况时,可以按照以下步骤确认。 步骤1:屏蔽主动注入 在客户端配置策略中,增加配置策略hookapi_disinj,值为1;待策略同步到客户端后,重启客户端确认问题是否解决。如果解决,则转到...

IP-Guard专栏 1411

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

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

weixin_45685889的博客 6875

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

m0_74234485的博客 283

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

设计一套生产级 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的博客 146

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

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

努力努力再努力wz的博客 281

【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、付费专栏及课程。

余额充值