网站开发关于安全问题广州网站设计制作公司

张小明 2026/1/9 14:42:07
网站开发关于安全问题,广州网站设计制作公司,北京网络销售公司,惠州做公司网站对于.NET开发者而言#xff0c;入门OpenCV的一个很舒适的方式就是先去使用OpenCVSharp#xff0c;它是 OpenCV 的 .NET 封装#xff0c;而且作者还开源了一个示例库#xff0c;可以通过示例库进行入门学习。OpenCVSharp仓库地址#xff1a;https://github.com/shimat/open…对于.NET开发者而言入门OpenCV的一个很舒适的方式就是先去使用OpenCVSharp它是 OpenCV 的 .NET 封装而且作者还开源了一个示例库可以通过示例库进行入门学习。OpenCVSharp仓库地址https://github.com/shimat/opencvsharpopencvsharp_samples仓库地址https://github.com/shimat/opencvsharp_samples作者提供了几十个可以直接运行的示例代码一开始可以先大概运行一下这些示例看一下用这个库可以实现哪些功能。入门第一步就是先学会用那些视觉算法的原理可以先不懂大概了解一下就够了等后面真的需要你深入了解的时候再去了解也不迟现在深入理解原理容易让小白放弃刚开始入门我们就当一名踏踏实实的“掉包侠”。Aruco 标记检测与透视变换第一个例子是关于Aruco 标记检测和透视变换的。第一步先运行起来看一下实现了什么效果首先原图是这样的注意到上面有4个有点奇怪的四边形。然后识别这几个四边形的区域然后再进行一下透视变换刚刚看到的这些四边形就是Aruco标记它是拿来干嘛的呢我的简单理解就是拿来标记用的一个经典的应用就是替换相框中的图片。OpenCVSharp好像还没有提供生成Aruco标记的功能但是已经有了识别的功能让我们看看这个效果是如何实现的吧// The locations of the markers in the image at FilePath.Image.Aruco.const int upperLeftMarkerId 160;const int upperRightMarkerId 268;const int lowerRightMarkerId 176;const int lowerLeftMarkerId 168;using var src Cv2.ImRead(ImagePath);var detectorParameters new DetectorParameters();detectorParameters.CornerRefinementMethod CornerRefineMethod.Subpix;detectorParameters.CornerRefinementWinSize 9;using var dictionary CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict4X4_1000);CvAruco.DetectMarkers(src, dictionary, out var corners, out var ids, detectorParameters, out var rejectedPoints);每个Aruco标记都有一个确定的ID然后根据路径读取图片。var detectorParameters new DetectorParameters();detectorParameters.CornerRefinementMethod CornerRefineMethod.Subpix;detectorParameters.CornerRefinementWinSize 9;进行检测器参数配置DetectorParameters: 创建ArUco检测器的参数对象用于控制标记检测的精度和行为CornerRefinementMethod.Subpix: 设置角点细化方法为子像素级别提高角点检测精度CornerRefinementWinSize 9: 设置角点细化窗口大小为9x9像素用于角点周围的子像素级优化using var dictionary CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict4X4_1000);进行字典配置CvAruco.GetPredefinedDictionary: 获取OpenCV预定义的ArUco标记字典PredefinedDictionaryName.Dict4X4_1000: 选择4x4位编码、包含1000个不同标记的字典类型CvAruco.DetectMarkers(src, dictionary, out var corners, out var ids, detectorParameters, out var rejectedPoints);这就在进行ArUco标记检测了主要知道一下参数是什么意思就行了。src - 输入图像包含要检测ArUco标记的源图像dictionary - 标记字典预定义的ArUco标记字典前面配置的Dict4X4_1000corners - 检测到的标记角点输出参数每个标记的4个角点坐标按顺时针顺序存储从左上角开始ids - 检测到的标记ID输出参数每个检测到的标记对应的ID编号detectorParameters - 检测参数前面配置的检测器参数包含角点细化等设置rejectedPoints - 被拒绝的候选标记输出参数检测过程中被识别为候选但最终被拒绝的标记角点自己再稍微打断点加深一下印象确实是每一项都有四个点。检测出了ArUco标记的ID。确实有一组被拒绝的候选标记。using var detectedMarkers src.Clone();CvAruco.DrawDetectedMarkers(detectedMarkers, corners, ids, Scalar.Crimson);在图像上绘制区域与ID。// Find the index of the four markers in the ids array. Well use this same index into the// corners array to find the corners of each marker.var upperLeftCornerIndex Array.FindIndex(ids, id id upperLeftMarkerId);var upperRightCornerIndex Array.FindIndex(ids, id id upperRightMarkerId);var lowerRightCornerIndex Array.FindIndex(ids, id id lowerRightMarkerId);var lowerLeftCornerIndex Array.FindIndex(ids, id id lowerLeftMarkerId);// Make sure we found all four markers.if (upperLeftCornerIndex 0 || upperRightCornerIndex 0|| lowerRightCornerIndex 0 || lowerLeftCornerIndex 0){return;}// Marker corners are stored clockwise beginning with the upper-left corner.// Get the first (upper-left) corner of the upper-left marker.var upperLeftPixel corners[upperLeftCornerIndex][0];// Get the second (upper-right) corner of the upper-right marker.var upperRightPixel corners[upperRightCornerIndex][1];// Get the third (lower-right) corner of the lower-right marker.var lowerRightPixel corners[lowerRightCornerIndex][2];// Get the fourth (lower-left) corner of the lower-left marker.var lowerLeftPixel corners[lowerLeftCornerIndex][3];// Create coordinates for passing to GetPerspectiveTransformvar sourceCoordinates new ListPoint2f{upperLeftPixel, upperRightPixel, lowerRightPixel, lowerLeftPixel};就是确保都找到了这些ID然后确定了一个区域就是这么一个区域这个区域由第一个ArUco标记的左上角点、第二个右上角点、第三个左下角点与第四个右下角点组成。var destinationCoordinates new ListPoint2f{new Point2f(0, 0),new Point2f(1024, 0),new Point2f(1024, 1024),new Point2f(0, 1024),};首先进行目标坐标定义定义了变换后的标准矩形区域创建一个1024×1024像素的正方形。using var transform Cv2.GetPerspectiveTransform(sourceCoordinates, destinationCoordinates);然后进行计算透视变换矩阵sourceCoordinates: 从检测到的4个ArUco标记角点提取的源坐标destinationCoordinates: 目标标准矩形坐标返回值: 3×3的透视变换矩阵用于将源四边形映射到目标矩形using var normalizedImage new Mat();Cv2.WarpPerspective(src, normalizedImage, transform, new Size(1024, 1024));
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

二手网站建设论文一个ip可以做几个网站

PowerShell脚本打包的5个创新用法:从脚本到专业应用的进阶实战 【免费下载链接】Win-PS2EXE Graphical frontend to PS1-to-EXE-compiler PS2EXE.ps1 项目地址: https://gitcode.com/gh_mirrors/wi/Win-PS2EXE 还在为PowerShell脚本的部署分发而烦恼&#xf…

张小明 2026/1/3 15:30:38 网站建设

网络推广培训班哪家好怎么把网站做seo到首页

缓存策略实战进阶:架构师必知的性能优化指南 【免费下载链接】system-design-101 使用视觉和简单的术语解释复杂系统。帮助你准备系统设计面试。 项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-101 在当今高并发系统架构中,缓…

张小明 2025/12/30 20:20:47 网站建设

规范网站建设情况的报告大连建设银行招聘网站

终极Mac菜单栏整理方案:Ice工具让你的桌面瞬间清爽 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 还在为Mac菜单栏上密密麻麻的图标而烦恼吗?每天都要在拥挤的图标堆里寻找需…

张小明 2026/1/8 3:04:11 网站建设

wordpress主題很慢百度seo设置

一 安装与调试安装平台与固定确保安装平台具有足够刚度与稳定性,以减小运行中的抖动与共振;尽量增大模组底座与平台的接触面积。安装台面平整度建议不低于0.05 mm/500 mm,高精密场合建议小于0.02 mm/500 mm。安装前清理平台异物、毛刺。固定螺…

张小明 2026/1/7 12:34:43 网站建设

蚌埠网站建设专业公司广州3d网站开发

虚拟化管理与Web应用服务器配置全解析 一、Xen虚拟化管理 1.1 虚拟化概念 虚拟化技术将操作系统的运行实例与物理硬件分离,操作系统在虚拟机中运行,多个虚拟机共享底层硬件资源。这使得我们可以在一台物理机上运行多个虚拟系统,提高硬件利用率。 1.2 Xen工作原理 虚拟化…

张小明 2025/12/23 18:29:58 网站建设

php wap网站源码上海网站建设公司怎么分辨好坏

一、项目愿景:我们的 Agent 能做什么?传统的客服机器人是“人工智障”,只会关键词匹配。我们要做的 Agent 具备以下能力:闲聊能力:基于通义千问,像真人一样对话。企业知识库 (RAG):用户问“运费…

张小明 2025/12/23 18:28:56 网站建设