在C#中使用OpenCV(参考GOCW)
作者:admin 来源: 2022/11/30 16:02:40

    在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,下载码是啥?如何下载=》点击查看

称      呼:
联系方式:
您的评论:
技术支持:l.w.dong@qq.com www.luweidong.cn
广州市   wx:lwdred
Copyright © 2014 三味书屋 All Rights Reserved
技术支持:l.w.dong@qq.com  sitemap xml  sitemap html

粤公网安备44010602011869号

粤ICP备13031080号-1