在C#使用OpenCV参考GOCW
在gitee上看到一个感兴趣的项目,《在C#中使用OpenCV(使用GOCW)》,https://gitee.com/jsxyhelu2020/gocw。
总得来说,这个项目实现了使用原生C 编写OpenCV算法,封装成动态链接库(windows平台是.dll),再使用C#通过CLR引用动态库中的函数方法。是我希望了解的实现方式。
按作者总结就是:
(1)分离界面和算法业务
(2)图像数据直接通过内存传值,高效率完成算法调用
(3)直接编写C 语法程序,方便维护改进
(4)在C#中可以通过CLR方式引用,提供函数级别接口
一、下载编译测试运行
从gitee上下载源码,根据提示一步步设置完毕,编译通过,但是在使用C#通过CLR引用动态库中的函数方法时却出错。
这个项目开源于2年前,使用的OpenCV版本是4.1.2。
下载了4.1.2依然是提示失败。
二、重新搭建项目
我决定重新搭建这个项目。改用OpenCV4.5.5版本。基于VS2022
(1)新建C 项目
(2)新建头文件和源文件:GOCW.h和GOCW.cpp
分别把源码贴进去,此处略去,可于文末下载源码查看。
(3)配置环境
根据文章《三味书屋-OpenCV在windows中的环境搭配 (luweidong.cn)》配置OpenCV在windows vs中的运行环境。
注意在配置运行环境前,在配置管理器中,选好运行平台,我这里选择x64
注意:高级->公共语言运行时支持,设置为公共语言运行时支持(/clr)。.net 目标框架版本填写:v4.7.2,需要与第(7)步新建的winform版本一致。
(4)删除默认文件
删除4个文件:framework.h、dllmain.cpp、pch.cpp、pch.h
(5)取消预编译头
第四步删除pch.h和pch.cpp,所以这里取消预编译头。在C/C ->预编译头,设置为:不使用预编译头。
在名为“GOCW”的C 项目上右键,选择属性,可以打开配置页。
(6)编译运行
首次编译后提示:不支持两阶段名称查找。
解决方法是打开项目属性,C/C ->语言,把其中的符合模式修改为:否。
(7)新建winform(.NET Framework)项目
基于.net 4.7.2。框架需要与(3)配置环境中的.net 目标框架版本一致。
放置一个button控件和一个picture box控件
添加引用,引用C 项目:GOCW
button代码:
-
Bitmap bmp = (Bitmap)Bitmap.FromFile("K:/test.png");
-
GOCWClass client = new GOCWClass();
-
//调用图像处理算法
-
MemoryStream ms = new MemoryStream();
-
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
-
byte[] bytes = ms.GetBuffer();
-
Bitmap bitmap = client.testMethod(bytes);
-
pictureBox1.Image = bitmap;
注意:配置管理器中,各个平台需要一样
运行,测试成功。
下载码是:67E903C899,下载码是啥?如何下载=》点击查看https://www.luweidong.cn/details/88
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbijjj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13