0
点赞
收藏
分享

微信扫一扫

微软 Edge 浏览器目前无法支持 avif 格式

佳简诚锄 2023-11-28 阅读 51

Unity C#

cameraDll.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
public class cameraDll : MonoBehaviour
{


[DllImport("run_on_camera_sequence")]
//static extern void ByteToMat(System.IntPtr imageData, int imageW, int imageH, int nFlag);
static extern void ByteToMat(byte[] imagedata, int imageW, int imageH, int nFlag);


// Start is called before the first frame update



int width = 640;
int height = 480;

private WebCamTexture webCamTexture;


void Start()
{

webCamTexture = new WebCamTexture();

如果有后置摄像头,调用后置摄像头
//for (int i = 0; i < WebCamTexture.devices.Length; i++)
//{

// print(WebCamTexture.devices[i].name);

// if (WebCamTexture.devices[i].name == "Creative GestureCam")
// {
// webcamTexture.deviceName = WebCamTexture.devices[i].name;

// break;
// }
//}
webCamTexture.deviceName = WebCamTexture.devices[0].name;
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = webCamTexture;
webCamTexture.Play();



}


// Update is called once per frame
void Update()
{

ByteToMat(ConvertWebCamTextureToByteArray(), 480, 640, 3);

}

//获取像素
public byte[] ConvertWebCamTextureToByteArray()
{

Color[] pixels = new Color[width * height];

pixels = webCamTexture.GetPixels();
byte[] bytes = new byte[width * height * 4];
for (int i = 0; i < pixels.Length; i++)
{
Color color = pixels[i];
bytes[i * 4] = (byte)(color.r * 255);
bytes[i * 4 + 1] = (byte)(color.g * 255);
bytes[i * 4 + 2] = (byte)(color.b * 255);
bytes[i * 4 + 3] = (byte)(color.a * 255);
}

return bytes;
}


}


C++

cv::Mat outImg;
extern "C" __declspec(dllexport)
//解析从u3d中传过来的字节格式的图像数据为Mat
void ByteToMat(byte* pImg, int nH, int nW, int nFlag)//nH,nW为BYTE*类型图像的高和宽,nFlag为通道数
{
if (pImg == nullptr)
{
return ;
}


outImg = cv::Mat(nH, nW, CV_8UC4, pImg);
cv::cvtColor(outImg, outImg, cv::COLOR_RGB2BGR);
cv::flip(outImg, outImg, 1);
cv::rotate(outImg, outImg, cv::ROTATE_180);

cv::imshow("u3dvideo", outImg);
cv::waitKey(1);
}

初阶上nFlag没用,可以不要。

举报

相关推荐

0 条评论