Matオブジェクトの新規作成とピクセル単位のアクセス

コンピュータ

OpenCVで画像を扱うにあたり新規画像の作成とピクセル単位でアクセスする方法を確認しておきたいと思います。
よく使う24ビットカラーと8ビットのグレイスケールを試してみました。

ソース

// 
// Matオブジェクトの新規作成とピクセル単位のアクセス
// 
using System;
using OpenCvSharp;
using OpenCvSharp.Extensions;

// コンパイル
// csc new.cs /r:OpenCvSharp.dll /r:OpenCvSharp.Extensions.dll

class Program
{
    // アプリケーションのエントリポイント
    static void Main()
    {
        // 24ビットカラー
        // 幅400ピクセル 高さ400ピクセル 符号なし8ビット3個の配列
        using (var mat = new Mat(400, 400, MatType.CV_8UC3)) 
        {
            Console.WriteLine("チャンネル数:{0}", mat.Channels());

            for (int y = 0; y < mat.Height; y++)
            {
                for (int x = 0; x < mat.Width; x++)
                {
                    Vec3b pic = mat.At<Vec3b>(y, x);

                    pic[0] = 255;
                    pic[1] = 0;
                    pic[2] = 0;

                    mat.Set(y, x, pic);
                }
            }
            Cv2.ImShow("sample", mat);
            Cv2.WaitKey(0);
        }

        // グレースケール
        // 幅400ピクセル 高さ400ピクセル 符号なし8ビット
        using (var mat = new Mat(400, 400, MatType.CV_8UC1)) 
        {
            Console.WriteLine("チャンネル数:{0}", mat.Channels());

            for (int y = 0; y < mat.Height; y++)
            {
                for (int x = 0; x < mat.Width; x++)
                {
                    byte pic = mat.At<byte>(y, x);

                    pic = 255;

                    mat.Set(y, x, pic);
                }
            }
            Cv2.ImShow("sample", mat);
            Cv2.WaitKey(0);
        }
    }
}

MatType.CV_8UC3…8ビットunsingned char3個の配列…24ビット
MatType.CV_8UC1…8ビットunsingned char…8ビット

Vec3b…unsigned char 3個

結果


カラー
チャンネル数:3

グレイスケール
チャンネル数:1

コメント