iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Unity调用C++ dll实现打开双目相机
  • 654
分享到

Unity调用C++ dll实现打开双目相机

2024-04-02 19:04:59 654人浏览 八月长安
摘要

目录1.vs中生成dll2.Unity中justatry脚本3.在unity中调试4.在vs中调试4.1 把unity的工程生成对应的exe4.2 在vs项目的属性中做如下设置4.3

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 initialization
	void 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 frame
	void 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 initialization
	void 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 frame
	void 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 

如果按以上设置还是不对,提示找不到dll,则把dll的输出放在与Plugins或Assets文件夹同一级尝试。

如果你已经把dll放在这里了,还是显示找不到,则一定是你用vs生成dll的库没有在环境变量里,然后unity里面调用时找不到vs生成dll所依赖的一些库。可以把一些你知道的库直接放在vs生成的dll一起,全放在unity工程里,应该就好了。

以上就是Unity调用C++ dll实现打开双目相机的详细内容,更多关于Unity双目相机的资料请关注编程网其它相关文章!

--结束END--

本文标题: Unity调用C++ dll实现打开双目相机

本文链接: https://www.lsjlt.com/news/148315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Unity调用C++ dll实现打开双目相机
    目录1.vs中生成dll2.unity中justatry脚本3.在unity中调试4.在vs中调试4.1 把unity的工程生成对应的exe4.2 在vs项目的属性中做如下设置4.3...
    99+
    2024-04-02
  • C#调用打印机实现打印
    一、引用BarcodeStandard.dll #region BarcodeStandard.dll string inputS...
    99+
    2024-04-02
  • C语言与C++项目实现相互调用
    目录前言一、C++项目调用C的静态库二、C项目调用C++的静态库三、总结前言 extern “c”的作用可以实现c语言和c++相互调用。 1.当我们写c语言代...
    99+
    2024-04-02
  • c#调用c++的DLL的实现方法
    目录1.采用托管的方式进行调用,就和正常调用c#的dll一样2.非托管的方式进行调用C#是托管型代码,创建的对象会自动回收。C++是非托管型代码,创建的对象需要手动回收(有时不手动回...
    99+
    2024-04-02
  • C#怎么调用打印机实现打印
    本篇内容主要讲解“C#怎么调用打印机实现打印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么调用打印机实现打印”吧!一、引用BarcodeStandard.dll  &...
    99+
    2023-06-30
  • C++封装成DLL并调用的实现
    目录第一步:编写.cpp和.h文件第二步:生成动态链接库.dll和静态链接库.lib第三步:调用通过.h文件调用;使用vs2019将C++封装成DLL并调用主要有以下几个步骤: 1)...
    99+
    2023-03-01
    C++封装DLL C++ DLL调用
  • python 与c++相互调用实现
    目录一、c++调用Python1.Python脚本2.C++调用python脚本二、接口方法1.规范化语法三、Pthon调用c++1.基于extern2.基于swig一、c++调用P...
    99+
    2024-04-02
  • golang调用c实现的dll接口细节分享
    目的 本篇文章主要介绍golang在调用c实现的dll时,具体的一些方式。比如值传递、参数传递、指针等等的一些使用。 一、dll的代码 c实现的dll代码: hello.h #i...
    99+
    2024-04-02
  • C和C++如何实现互相调用详解
    目录前言1、为什么会有差异?2、extern “C”3、C++调用C正确方式4、C调用C++补充:C/C++文件之间函数的引用总结前言 在项目开发过程中,我们...
    99+
    2023-01-10
    c++中调用c c和c++混合编译 c语言能调用c++吗
  • 怎么实现C#与Lua相互调用
    这篇文章主要介绍“怎么实现C#与Lua相互调用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么实现C#与Lua相互调用”文章能帮助大家解决问题。一、编译Lua动态链接库1. 编译Windows下使...
    99+
    2023-06-30
  • C++如何实现与Lua相互调用
    今天小编给大家分享一下C++如何实现与Lua相互调用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。概述从本质上来看,其实说是...
    99+
    2023-07-05
  • 如何用C#做中间语言实现Java调用.net DLL
    如何用C#做中间语言实现Java调用.net DLL,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。51CTO曾经为大家讲过“Java与.NET的WebServices相互调...
    99+
    2023-06-17
  • C++实现与Lua相互调用的示例详解
    目录概述示例C++调用lua编译lua流程运行lua调用C++解释运行调用语义概述 从本质上来看,其实说是不存在所谓的C++与lua的相互调用。lua是运行在C上的,简单来说lua的...
    99+
    2023-05-13
    C++ Lua相互调用 C++ Lua 调用 C++ Lua
  • 原生实现C#与Lua相互调用方法(Unity3D可用)
    目录引言一、编译Lua动态链接库1. 编译Windows下使用的DLL文件2. 编译Android下使用的SO文件二、编写C#使用的API1. 动态链接库在Unity中的存放位置。2...
    99+
    2024-04-02
  • C#怎么实现打开指定目录和指定文件
    这篇文章主要介绍“C#怎么实现打开指定目录和指定文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么实现打开指定目录和指定文件”文章能帮助大家解决问题。一、实现内容1.1实现的功能想要实现:①...
    99+
    2023-07-02
  • Android Camera开发实现可复用的相机组件
    本文实例为大家分享了Android Camera实现可复用相机组件的具体代码,供大家参考,具体内容如下 若自己的应用需要使用camera,有两种解决方案。 1. 使用Intent调用...
    99+
    2024-04-02
  • python模块与C和C++动态库相互调用实现过程示例
    目录Python调用C/C++1、Python调用C动态链接库C语言文件:pycall.cgcc编译生成动态库libpycall.soPython调用动态库的文件:pycall.py...
    99+
    2024-04-02
  • Android无需权限调用系统相机拍照怎么实现
    这篇“Android无需权限调用系统相机拍照怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android无需权限调用...
    99+
    2023-07-05
  • 怎么用Unity实现打开淘宝app并跳转到商品页面功能
    这篇文章主要介绍“怎么用Unity实现打开淘宝app并跳转到商品页面功能”,在日常操作中,相信很多人在怎么用Unity实现打开淘宝app并跳转到商品页面功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用...
    99+
    2023-06-20
  • 【Android入门到项目实战-- 7.3】—— 如何调用手机摄像头和相册
    目录 一、调用摄像头拍照 二、打开相册选择照片         学完本篇文章可以收获如何调用手机的摄像头和打开手机相册选择图片功能。 一、调用摄像头拍照 先新建一个CameraAlbumTest项目。 修改activity_main.x...
    99+
    2023-08-31
    智能手机 android android studio 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作