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

VSC#搭配C++动态链接库开发OpenCV

VSC++配置OpenCV

C++动态链接与OpenCV环境搭建

创建动态链接库

image

添加环境变量

在用户变量下的Pah中添加以下环境变量

D:\Opencv3.4.6\build\bin

D:\Opencv3.4.6\build\x64\vc15\bin

image

动态链接库添加并配置属性表

在属性管理器下的Debug|x64中添加属性表

image

VC++目录中包含目录添加D:\Opencv3.4.6\build\include

image

VC++目录中库目录添加D:\Opencv3.4.6\build\x64\vc15\lib

image

链接器-输入-附加依赖项添加opencv_world346d.lib

image

编辑代码检查环境配置,诺失败可尝试重启VS

image

另存属性表备用

image

从属性表直接引用OpenCV配置

新建C++动态链接库,编辑代码显示引用报错

image

image

添加现有属性表

image

image

观察代码引用是否报错判断是否应用成功

image

C#配合C++动态链接库调试

编写C++动态链接库

添加OpenCVMethod头文件和C++文件

编写读取图像方法

#pragma once#ifdef IMAGEPROCESSOR_EXPORTS
#define IMAGEPROCESSOR_API __declspec(dllexport)
#else
#define IMAGEPROCESSOR_API __declspec(dllimport)
#endif// 定义跨语言的简单数据类型
typedef struct {int channels;int width;int height;void* ImgDataAddr;int ImgIndex;int ImgState;int ImgType;int ImgFormat;
} ImgStruct_t;extern "C" {IMAGEPROCESSOR_API void ReadImage(const char* FileName, const char* Format, ImgStruct_t& pImgOutput, bool IsWriteData = true);
}
#include "pch.h"
#include "OpenCVMethod.h"
#include"opencv2/opencv.hpp"void ReadImage(const char* FileName, const char* Format, ImgStruct_t& pImgOutput, bool IsWriteData)
{//转换为 std::stringstd::string imagePath(FileName);// 使用 OpenCV 读取图像cv::Mat image = cv::imread(imagePath, cv::IMREAD_UNCHANGED);// 获取图像的高、宽、通道数pImgOutput.height = image.rows;pImgOutput.width = image.cols;pImgOutput.channels = image.channels();// 计算图像数据的总大小(字节数)size_t dataSize = image.total() * image.elemSize();if (!IsWriteData)return;// 分配内存并创建 void* 指针//pImgOutput.ImgDataAddr = malloc(dataSize);// 将图像数据复制到 void* 指针memcpy(pImgOutput.ImgDataAddr, image.data, dataSize);
}

修改生成目录,与C#程序生成目录一致

image

编译C++动态库生成DLL文件

image

C#程序配置

修改平台统一为x64,移除Any CPU,所有项目配置自动生成 <Platforms>x64</Platforms>

image

image

C#与C++动态链接库联调

C#启动项目在属性-调试-打开调试启动配置文件UI-启用本机代码调试

image

C++动态链接库打上断点测试

image

断点命中极为成功

image

http://www.jsqmd.com/news/96056/

相关文章:

  • 【教程4>第10章>第5节】基于FPGA的图像中值滤波开发——RGB彩色图像中值滤波仿真测试以及MATLAB辅助验证
  • 251215不知不觉又快三点了
  • 工业互联网大赛全国三等奖!天云数据基于MaaS平台的安全生产管控智能体为行业发展注入新动能
  • 泉盛UV-K5固件升级终极指南:LOSEHU固件5分钟快速上手
  • 55、Linux脚本与系统故障排除全解析
  • 56、Linux系统问题排查与解决指南
  • STL转STEP完全指南:从3D打印到工程设计的无缝衔接
  • Java计算机毕设之基于SpringBoot高校大学生评奖评优系统的设计与实现基于springboot高校学生奖学金评定系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于springboot高校师资管理系统基于springboot高校师资资源管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • Docker Compose编排LLama-Factory多节点训练集群详细配置示例
  • Java计算机毕设之基于springboot的人才公寓管理系统基于springboot公寓管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • RevokeMsgPatcher路径配置黄金法则:告别“找不到路径“的终极指南
  • Java计算机毕设之基于SpringBoot+Vue果蔬种植销售一体化服务平台的设计与实现基于springboot果蔬种植销售一体化服务平台的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于SpringBoot+Vue海洋馆预约系统的设计与实现基于springboot海洋馆预约系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于springboot大学生心理健康分析及干预平台基于springboot高校心理健康评测与服务系统(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于Spring Boot的设备维护管理平台开发基于springboot工厂生产设备维护管理系统的设计(完整前后端代码+说明文档+LW,调试定制等)
  • 如何制作支持离线地图的GPS自行车码表:从硬件选型到功能实现的完整指南
  • Java计算机毕设之基于SpringBoot + Vue的工资信息管理系统基于springboot工资管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机Java毕设实战--基于Java Web的身体体脂健康管理系统的设计与实现基于Java Web的体脂健康管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 3D打印设备商不做加工服务,就成了旁观者!
  • 计算机Java毕设实战-基于SpringBoot+Vue工厂生产设备维护管理系统springboot工厂生产设备维护管理系统的设计【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-基于springboot工资管理系统职工工资管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 如何用拖拽方式5分钟搞定数据可视化大屏
  • MYSQL数据库------多表查询
  • 计算机Java毕设实战-基于SpringBoot+Vue的奖学金评定管理系统基于springboot高校学生奖学金评定系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 双活数据中心解决方案(附下载)
  • m3u8视频下载神器:浏览器扩展让网页视频永久保存
  • 解锁FMU仿真新维度:用FMPy重塑Python系统建模体验
  • 计算机Java毕设实战-基于springboot高校师资管理系统基于SpringBoot + Vue前后端分离的高校教师综合信息管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Google:智能体的质量(202511中文版)(附下载)