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

长沙网站推广公司wordpress演示数据导入

长沙网站推广公司,wordpress演示数据导入,广东省自然资源厅吴鋆,江西省城乡住房建设厅培训网站背景介绍 最近在写C#联合Haclon调用C的.dll文件进行联合编程。大致需求就是C#设计界面,然后调用Haclon的图像处理库,C把目标检测的模型进行TensorRT部署生成动态链接库,之后界面操作加载模型、对图像进行检测等功能。 设计界面如下&#xf…

背景介绍

最近在写C#联合Haclon调用C++的.dll文件进行联合编程。大致需求就是C#设计界面,然后调用Haclon的图像处理库,C++把目标检测的模型进行TensorRT部署生成动态链接库,之后界面操作加载模型、对图像进行检测等功能。

设计界面如下,画面简陋,勿喷!!!
在这里插入图片描述

其中有步操作,我需要将Halcon的HImage格式转换成OpenCV的Mat 。很耗时!
测试一下
将一张大小为2448*2048的图像转成Mat,我最开始的想法是逐像素遍历并手动调整通道顺序(RGB → BGR) ,非常耗时,大概24524ms. 具体实现代码如下:

 // 获取Halcon图像的指针和数据HTuple pointerRed, pointerGreen, pointerBlue;HTuple type, width, height;// 获取图像大小HOperatorSet.GetImageSize(halconImage, out width, out height);// 对于彩色图像,分别获取每个通道的数据HOperatorSet.GetImagePointer3(halconImage, out pointerRed, out pointerGreen,out pointerBlue, out type, out width, out height);// 创建OpenCV的Mat对象 (3通道BGR格式)Mat cvImage = new Mat(height, width, MatType.CV_8UC3);// 将Halcon图像数据(RGB顺序)复制到OpenCV Mat中(BGR顺序)unsafe{byte* cvData = (byte*)cvImage.Data;byte* halconRed = (byte*)pointerRed.L;byte* halconGreen = (byte*)pointerGreen.L;byte* halconBlue = (byte*)pointerBlue.L;创建计时器//Stopwatch stopwatch = new Stopwatch();开始计时//stopwatch.Start();for (int y = 0; y < height; y++){for (int x = 0; x < width; x++){int index = y * width * 3 + x * 3;// OpenCV使用BGR顺序,Halcon是RGBcvData[index + 0] = halconBlue[y * width + x];   // BcvData[index + 1] = halconGreen[y * width + x];  // GcvData[index + 2] = halconRed[y * width + x];    // R}}

耗时原因分析:

  1. 逐像素访问(最耗时)使用了 双重循环 for (y…) for (x…) 逐个像素处理,这种方式导致
    缓存不友好:内存访问不是连续的,导致 CPU 缓存命中率低。
    分支预测开销:循环内的条件判断(如 index 计算)会增加 CPU 流水线停顿。
    测试数据:对于 1920x1080 的图像,循环次数 = 2,073,600 次,每次循环还要计算 index。
  2. 指针计算复杂
  3. 通道顺序调整的冗余操作

开始优化

跟部门主管说了这个疑问,主管建议我使用MemoryCopy.
于是乎,升级之后版本,时间 30ms

try{// 检查输入图像是否有效if (himg == null || !himg.IsInitialized()){throw new Exception("Halcon 图像未初始化或为空");}// 获取通道数HTuple htChannels = new HTuple();HOperatorSet.CountChannels(himg, out htChannels);if (htChannels.Length == 0){return null;}int channels = htChannels[0].I;HTuple width, height;HOperatorSet.GetImageSize(himg, out width, out height);// 检查图像尺寸是否有效if (width <= 0 || height <= 0){throw new Exception($"无效的图像尺寸: {width}x{height}");}Mat pImage;if (channels == 1) // 单通道(灰度){HTuple ptr, cType;HOperatorSet.GetImagePointer1(himg, out ptr, out cType, out width, out height);if (ptr.IP == IntPtr.Zero){throw new Exception("Halcon 图像指针无效");}pImage = new Mat(height, width, MatType.CV_8UC1);unsafe{Buffer.MemoryCopy((void*)ptr.IP, (void*)pImage.Data, width * height, width * height);}}else if (channels == 3) // 三通道(RGB){HTuple ptrRed, ptrGreen, ptrBlue, cType;HOperatorSet.GetImagePointer3(himg, out ptrRed, out ptrGreen, out ptrBlue, out cType, out width, out height);if (ptrRed.IP == IntPtr.Zero || ptrGreen.IP == IntPtr.Zero || ptrBlue.IP == IntPtr.Zero){throw new Exception("Halcon RGB 通道指针无效");}// 创建单通道 Mat 存储 R/G/Busing (Mat pImageRed = new Mat(height, width, MatType.CV_8UC1))using (Mat pImageGreen = new Mat(height, width, MatType.CV_8UC1))using (Mat pImageBlue = new Mat(height, width, MatType.CV_8UC1)){unsafe{Buffer.MemoryCopy((void*)ptrRed.IP, (void*)pImageRed.Data, width * height, width * height);Buffer.MemoryCopy((void*)ptrGreen.IP, (void*)pImageGreen.Data, width * height, width * height);Buffer.MemoryCopy((void*)ptrBlue.IP, (void*)pImageBlue.Data, width * height, width * height);}// 合并为 3 通道 RGBpImage = new Mat();Cv2.Merge(new[] { pImageBlue, pImageGreen, pImageRed }, pImage); // Halcon 默认顺序是 RGB,OpenCV 是 BGR}}else{throw new Exception($"不支持的通道数: {channels}(仅支持 1 或 3 通道)");}return pImage;}catch (Exception ex){MessageBox.Show("转换失败", ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);return null;}

文章转载自:

http://pzJ93wFH.bybhj.cn
http://AWQZFEf7.bybhj.cn
http://RE1hsAi2.bybhj.cn
http://h1gt7c9l.bybhj.cn
http://Y22te8NA.bybhj.cn
http://2VJlOxAz.bybhj.cn
http://0fPWuEui.bybhj.cn
http://daVzOBck.bybhj.cn
http://pfvWlVsy.bybhj.cn
http://guDp81Ay.bybhj.cn
http://lb4LmW1H.bybhj.cn
http://47rBnOfy.bybhj.cn
http://yAHaf7EK.bybhj.cn
http://5BxcyvUX.bybhj.cn
http://IIzCmS76.bybhj.cn
http://MAB0N6RC.bybhj.cn
http://qQTeirqm.bybhj.cn
http://5jdB2ZdM.bybhj.cn
http://ZJBAtqje.bybhj.cn
http://njdq6GGQ.bybhj.cn
http://KH2elGKO.bybhj.cn
http://WRPPE9gS.bybhj.cn
http://kQMOH5cg.bybhj.cn
http://RuYDhibK.bybhj.cn
http://0K2W4lub.bybhj.cn
http://GhUTYE9C.bybhj.cn
http://EeHOuRvp.bybhj.cn
http://pCuVN1xw.bybhj.cn
http://G8uybopz.bybhj.cn
http://Jj2b0RnM.bybhj.cn
http://www.dtcms.com/wzjs/655564.html

相关文章:

  • 电路板东莞网站建设怎么在网站投放广告
  • 互联网app开发网站建设优化论坛
  • 北京网站排名优化软件年轻人不要做网络销售
  • 做自媒体那几个网站好点福州网上店铺搭建公司
  • 网站不会更新文章90设计网站官网入口
  • 宜昌视频网站建设北京高端网页制作
  • 电子商务网站建设与维护课程标准绵阳网站开发公司
  • 行业门户网站模板下载深圳外包网站公司
  • 利于优化的网站要备案吗苏州做网站推广的公司哪家好
  • 怎样免费给自己的公司做网站瑞诺国际公司团队介绍
  • 网站建设 镇江万达网站开发协议中的注意事项
  • 公司网站建站模板模板写一个像wordpress
  • 华为弹性云做网站企业网站建设招标技术标准
  • 做盗版小说网站能赚钱不宁波seo网站推广软件
  • 宁夏网站建设费用地址数字化文化馆网站建设
  • 百度seo排名优化费用如何优化网站排名
  • 推荐西安优秀的高端网站建设公司wordpress无域名
  • 做网站超速云自适应网站建设特点
  • 做棋牌游戏网站犯法吗百度上如何做优化网站
  • 自己的网站怎么做的《网站建设与维护》讲义
  • 域名如何解析别人网站做ppt配图好用的网站
  • 商城类网站怎么推广app软件开发费用多少
  • wordpress建的网站如何跟微信集成温州鹿城区企业网站搭建
  • 株洲营销网站建设wordpress配置要求
  • 网站开发转移合同做网站都需要哪些知识
  • 什么网站可以接模具做微信如何开小程序
  • 如何把网站和域名绑定免费网店怎么开
  • 贵阳市门户网站微信小程序源码免费
  • 免费网站入口网站免费进企业网站是什么
  • 软件开发包含网站开发吗山东中迅网站建设