unity调用dll打开双目
1, vs中生成dll
对应的生成dll的cpp如下
#include<opencv2/opencv.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;#define EXPORT_API __declspec(dllexport)VideoCapture my_camera;
int width = 640;
int height = 480;extern "C" bool EXPORT_API openCamera()
{bool my_open = false;while (!my_camera.isOpened()){std::cout << "Cannot open the camera!" << std::endl;my_camera.open(0);//一个接口能同时打开两个摄像头}my_camera.set(CV_CAP_PROP_FRAME_WIDTH, width*2);my_camera.set(CV_CAP_PROP_FRAME_HEIGHT, height);if (my_camera.isOpened()){my_open = true;}return my_open;
}extern "C" void EXPORT_API recieveFrame(uchar* texturePtr)
{Mat my_frameBGR;Mat my_frameRBG;my_camera >> my_frameBGR;if (my_frameBGR.data){cvtColor(my_frameBGR, my_frameRBG, CV_BGR2RGB);memcpy(texturePtr, my_frameRBG.data, my_frameRBG.cols*my_frameRBG.rows*my_frameRBG.channels()*sizeof(uchar));}}extern "C" void EXPORT_API closeCamera()
{if (my_camera.isOpened()){my_camera.release();}
}
2, unity中justatry脚本
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Runtime.InteropServices;用 c++中 dll 文件需要引入public class justatry : MonoBehaviour {[DllImport("_dectecting")]public static extern bool openCamera();[DllImport("_dectecting")]public static extern bool recieveFrame(byte[] imageData);[DllImport("_dectecting")]public static extern bool closeCamera();public bool IsOpen = false;public byte[] imageData;public Texture2D tex;public int Width = 640;public int Length = 480;// Use this for initializationvoid Start () {IsOpen = openCamera();if(IsOpen){imageData = new byte[Length * Width * 3*2];tex = new Texture2D(Width*2, Length, TextureFormat.RGB24, false);}}// Update is called once per framevoid Update () {if (IsOpen){recieveFrame(imageData);tex.LoadRawTextureData(imageData);tex.Apply();GetComponent<Renderer>().material.mainTexture = tex;}}void CloseCamera(){if (IsOpen){closeCamera();}}public void OnApplicatoinQuit(){closeCamera();}
}
using System.Runtime.InteropServices;用 c++中 dll 文件需要引入public class justatry : MonoBehaviour {[DllImport("_dectecting")]public static extern bool openCamera();[DllImport("_dectecting")]public static extern bool recieveFrame(byte[] imageData);[DllImport("_dectecting")]public static extern bool closeCamera();public bool IsOpen = false;public byte[] imageData;public Texture2D tex;public int Width = 640;public int Length = 480;// Use this for initializationvoid Start () {IsOpen = openCamera();if(IsOpen){imageData = new byte[Length * Width * 3*2];tex = new Texture2D(Width*2, Length, TextureFormat.RGB24, false);}}// Update is called once per framevoid Update () {if (IsOpen){recieveFrame(imageData);tex.LoadRawTextureData(imageData);tex.Apply();GetComponent<Renderer>().material.mainTexture = tex;}}void CloseCamera(){if (IsOpen){closeCamera();}}public void OnApplicatoinQuit(){closeCamera();}
}
注意,脚本要挂在plane上
3,在unity中调试则dll的输出目录是 unity项目工程名\Assets\Plugins
D:\Michael Wang\SC\2018\1\openDoublecamera\UnityTry\Assets\Plugins
4,在vs中调试则
4.1 把unity的工程生成对应的exe
这是生成的unity exe对应的生成目录
对应的目录如
D:\Michael Wang\SC\2018\1\openDoublecamera\UnityTry\test.exe
4.2 在vs项目的属性中做如下设置
命令后用上面的路径,注意是放在命令里不是命令参数里
在对应的unity exe目录中找到 unity工程名_Data下Plugins的目录是
D:\Michael Wang\SC\2018\1\openDoublecamera\UnityTry\test_Data\Plugins
4.3 在VS工程的属性中的输出目录设置为上面的目录
做完以上设置就直接可以在VS下调试了。
5 注意vs和unity的平台x86/x64要对应
5.1 vs x86/x64
5.2 unity
5.3, 如果按以上设置还是不对,提示找不到dll,则把dll的输出放在与Plugins或Assets文件夹同一级尝试。
如果你已经把dll放在这里了,还是显示找不到,则一定是你用vs生成dll的库没有在环境变量里,然后unity里面调用时找不到vs生成dll所依赖的一些库。可以把一些你知道的库直接放在vs生成的dll一起,全放在unity工程里,应该就好了。
unity调用dll打开双目相关推荐
- unity 调用 .dll 或 .so时遇到的问题
1.32位的 .dll 无法在64位的unity编辑器下运行. System.DllNotFoundException: xxx , 64位的程序运行32位的dll是会报这种错 2.Failed t ...
- Unity调用UniWebView打开H5界面脚本
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //***** ...
- Unity调用动态链接库dll和so
[001]Unity调用动态链接库dll和so ApolloAR https://www.jianshu.com/p/f37bb72979a1 一.PC平台 (注:环境 VS2017+Unity20 ...
- dll放在unity哪个文件夹下_unity中调用dll文件总结
unity中调用dll文件总结 根据收集的资料,对unity中调用dll文件进行总结,目前常用的两种,在给出vs中封装dll文件的步骤. 一.调用c#中的dll文件 1.1封装dll文件 首先新建一个 ...
- unity 调用C#类将文字转换为语音
以前做语音的时候都是调用事先录制好的音频来进行播放,但是这样太不方便,而且即使是动态加载也会使压缩包体积大大加大,今天终于找到了一个调用类就可以实现将文字转换成语音状态: 在VS的引用中右键引用COM ...
- Unity调用android相册获取图片或视频
Unity调用android相册获取图片或视频 (此文章对有unity基础和对环境配置有基础的童嚡容易看懂) 因为项目上用到,在百度了很多大佬的文章后,陆陆续续踩了很多坑,可能是我哪里设置的不对,大部 ...
- 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】
C#中dll调用方法 一. DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要 ...
- C#程序实现动态调用DLL的研究(转)
摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...
- VS2013环境生成和调用DLL动态链接库
创建动态库方法: 创建动态库是生成 .dll .lib 两个个文件 文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:D ...
- C++ Builder创建和调用dll中的资源
程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...
最新文章
- 第八天-《企业应用架构模式》-通盘考虑
- 在进入新版本 的时候,进行推送引导
- Java中测长函数_Core Java测试题
- VTK:图片之ImageToStructuredPoints
- Java中的Scanner类和String类
- pringMVC“Ambiguous mapping found. Cannot map 'XXXController' bean method”解决方法
- Linux网络编程--文件描述符
- 实时导出正在运行的虚拟机或检查点
- 《疯狂Java讲义》(七)---- 方法
- c语言语法分析常见问题,C语言语法提要与常见错误分析.doc
- The Beauty of DirectX 11 (3) --- constant buffer, buffered/structure buffer
- 正确的座机号码格式_简历里的手机号及座机号的标准写法是什么?正确书写才更可能求职成功!...
- 【52】NVMe暴力热插拔对系统的要求
- 2022-2028全球新冠检测试剂行业调研及趋势分析报告
- 抢不到回家的票,还真不是12306技术不行
- 【观察】打造智能决策“新引擎”,杉数科技勇闯“无人区”
- solidworks批量图号分离_SolidWorks2014基于宏实现快速图号名称分离.docx
- AI工具是帮手还是助手:
- 如何理解结构化、非结构化和半结构化数据?
- c3po数据库连接池简单配置
热门文章
- android最贵的手机,2019翻盖手机排行榜_2019年最贵的手机有哪些?最贵手机排行榜...
- java语言实现_java语言实现树
- alter在mysql_MySQL的alter的使用
- sqlplus几个存储过程执行变量值窜掉了_单片机必知的数据存储与程序编写知识!...
- 在VIM中使用GDB调试 – 使用pyclewn
- adb 连接时候不弹出授权对话框
- RHEL7中设置ssh
- Juniper MIP
- ARM处理器是有益补充
- 简单调用exe的方法