«Есть ли способ получить доступ к пикселю на изображении по определенной позиции, например (x, y) в opencvforunity» - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь получить доступ к пикселям изображения по позиции. Я использовал байтовый массив для доступа, но он не дает правильную позицию x, y, как изображение питона [x] [y], есть ли лучший способ получить доступ к пикселям ?

Я использовал OpenCV плагин в Unity, Visual Studio и не могу получить к ним доступ

public texture2D image;

Mat imageMat = new Mat(image.height, image.width, CvType.CV_8UC4);
Utils.texture2DToMat(image, imageMat); // actually converts texture2d to matrix

byte[] imageData = new byte[(int)(imageMat.total() * imageMat.channels())]; // pixel data of image
imageMat.get(0, 0, imageData);// gets pixel data

pixel=imageData[(y * imageMat.cols() + x) * imageMat.channels() + r]

y и x - значения пикселей в коде, а r - канал, но я не могу получить доступ к определенному значению х и у с этим кодом

1 Ответ

1 голос
/ 02 июля 2019

Обычного способа сделать это не существует, потому что операция действительно медленная. Но для этого нужно сделать текстуру экрана из класса Camera .

После того, как вы сделаете текстуру, вы можете использовать texture.GetPixel (x, y)

public class Example : MonoBehaviour
{
    // Take a "screenshot" of a camera's Render Texture.
    Texture2D RTImage(Camera camera)
    {
        // The Render Texture in RenderTexture.active is the one
        // that will be read by ReadPixels.
        var currentRT = RenderTexture.active;
        RenderTexture.active = camera.targetTexture;

        // Render the camera's view.
        camera.Render();

        // Make a new texture and read the active Render Texture into it.
        Texture2D image = new Texture2D(camera.targetTexture.width, camera.targetTexture.height);
        image.ReadPixels(new Rect(0, 0, camera.targetTexture.width, camera.targetTexture.height), 0, 0);
        image.Apply();

        // Replace the original active Render Texture.
        RenderTexture.active = currentRT;
        return image;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...