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個
コメント