WebCamTexture图像底部的黑线

时间:2017-06-22 18:38:05

标签: c# unity3d webcam

当通过WebCamTexture从网络摄像头获取视频输入时,返回图像的底行是完全黑色的(RGB = 0,0,0)。 我尝试了几种不同的网络摄像头,并获得了相同的结果。 在使用Windows 10 Camera应用程序时以及在Processing或Java中获取网络摄像头时,我确实获得了正确的图像。

在画布上显示视频时会出现黑线(总是1像素高,图像宽),将快照保存到磁盘,以及使用GetPixels32()直接查看像素数据时。

这是图片底部的黑线:

enter image description here

我已确认返回的图像尺寸正确,即黑色行不是额外的行。它始终是黑色图像的最低线。

我在下面使用了c#代码。

这条黑线的原因是什么?有没有办法避免它?

我已查找有关此问题的任何信息,但未在网上找到任何信息。我是Unity的一名完全初学者,非常感谢您的帮助。

我使用的是Unity版本5.6.2但与5.5

有相同的问题
public class CamController : MonoBehaviour
{
    private WebCamTexture webcamTexture;
    private WebCamDevice[] devices;

    void Start()
    {
        //start webcam
        webcamTexture = new WebCamTexture();
        devices = WebCamTexture.devices;
        webcamTexture.deviceName = devices[0].name;
        webcamTexture.Play();
    }

    void Update()
    {
        //if user presses C capture cam image
        if (Input.GetKeyDown(KeyCode.C))
            captureImage();
    }

    void captureImage()
    {
        //get webcam pixels
        Color32[] camPixels;
        camPixels = webcamTexture.GetPixels32();

        //print pixel data for first and second (from bottom) lines of image to console
        for (int y = 0; y < 2; y++)
        {
            Debug.Log("Line: " + y);
            for (int x = 0; x < webcamTexture.width; x++)
            {
                Debug.Log(x + " - " + camPixels[y * webcamTexture.width + x]);
            }
        }

        //save webcam image as png
        Texture2D brightBGTexture = new Texture2D(webcamTexture.width, webcamTexture.height);
        brightBGTexture.SetPixels32(camPixels, 0);
        brightBGTexture.Apply();
        byte[] pngBytes = brightBGTexture.EncodeToPNG();
        File.WriteAllBytes(Application.dataPath + "/../camImage.png", pngBytes);
    }
}

1 个答案:

答案 0 :(得分:1)

致电SetPixels32后,必须致电Texture2D.Apply以将更改应用于Texture2D

在将Texture2D编码为png。

之前,您应该这样做
//save webcam image as png
Texture2D brightBGTexture = new Texture2D(webcamTexture.width, webcamTexture.height);
brightBGTexture.SetPixels32(camPixels, 0);
brightBGTexture.Apply();
byte[] pngBytes = brightBGTexture.EncodeToPNG();
File.WriteAllBytes(Application.dataPath + "/../camImage.png", pngBytes);

修改

即使调用Texture2D.Apply(),问题仍然存在。这是WebCamTexture API的错误,您应该通过编辑器提交错误报告。