Unity3d实现摄像头的截部分图(图片裁剪、截图)功能项目源码

Unity3d实现摄像头的截部分图(图片裁剪、截图)功能项目源码

功能需求

由于有个项目里需要识别二维码,就是在调用摄像头后,通过摄像头获取的图片对二维码进行识别。这样的话,将整个图片进行识别,识别的效率不高,所以打算弄一个识别框,只对识别框内的进行二维码识别,这样能大大提高识别率。
只不过这样的话就需要将框内的画面单独提取出来,再进行识别。就类似于截取画面内的一部分进行识别。

功能实现

搭建简单UI

新建两个RawImage,一个用于展示摄像头的画面,另一个用于展示截图。
一个按钮节点,点击后进行截图并展示,其实使用keycode快捷键也方便。

摄像头拍摄

这个功能我就不赘述了
不知道的可以看看我之前写的 Unity3d开发HoloLens2启动摄像头实现截图、拍照功能
虽然是针对HoloLens2写的,但是都是通用的。

截取部分图

大致的思路是先新定义了个Texture2D为截到的贴图,并通过SetPixels将像素点加到图片上。

计算截图的偏移值:


        Vector2 offset = new Vector2((webCamTextrue.width - w) / 2, (webCamTextrue.height - h) / 2);

这是根据截图的高宽,计算开始像素的偏移值,这里是在画面的中间位置进行截图,正常应该都是中间位置的截图。

设置贴图像素点:

        mTexture.SetPixels(webCamTextrue.GetPixels((int)offset.x, (int)offset.y, w, h));

先获取摄像头画面的像素,再将范围内的像素设置给截图。

截图代码

public RawImage CamImg, CutImg; 

    //定义截取的尺寸
     public int w = 256, h = 256;
    //截图贴图
    Texture2D mTexture;

  public void DoCut() {
    
    
        if (webCamTextrue.width < w || webCamTextrue.height < h) {
    
    
            Debug.LogError("截取尺寸错误!");
            return;
        }
        //计算取便宜值(此处是从中间截图)
        Vector2 offset = new Vector2((webCamTextrue.width - w) / 2, (webCamTextrue.height - h) / 2);
        //设置像素点
        mTexture.SetPixels(webCamTextrue.GetPixels((int)offset.x, (int)offset.y, w, h));
        mTexture.Apply();
        //关联贴图
        CutImg.texture = mTexture;
}

实现效果

在这里插入图片描述

工程源码

https://download.csdn.net/download/qq_33789001/15577210

猜你喜欢

转载自blog.csdn.net/qq_33789001/article/details/114386825
今日推荐