在Basler C# sample code的範例中,

經常看到影像資料來源為Byte[] buffer格式,

如何將byte array轉到OpenCV格式 Mat, 是第一個遇到的問題.

但更麻煩的Basler支援PixelFormat千奇百種, 每種相機又支援項目也不同

如何輕鬆轉換Mat且為自己想要的Color space, 這是第二個問題

以前笨笨的, 都自己寫轉格式的程式碼,

後來發現其實OpenCV已經都支援大部分的影像格式,

所以秉持不重新造輪的精神, 先來好好研究一番囉!

這樣有幾個好處:

1. 不用擔心自己寫的有無問題

2. Time-To-Market 加速產品開發速度

3. 可以專心在後面影像處理

================================================

測試1:

1. 用Bitmap去接收imageBuffer(1-D byte array)

2. 用Bitmap初始化一個灰階Image<Gray, byte>

3. 創建一個彩色Image<Rgb, byte> imgRgb

4. 用CvColor將資料進行轉換, BayerRg 轉成 Rgb 格式

附註: BitmapFactory 是在Pylon C# 範例資料夾  BitmapFoctory.cs 所提供

測試過, 還真的可以成功顯示彩色影像, 好開心唷!

private void GetBuffer(Byte[] imageBuffer, long width, long height, int camIndex)
{
int w = (int)width;
int h = (int)height;
Bitmap bmp;
BitmapFactory.CreateBitmap(out bmp, w, h, false);
BitmapFactory.UpdateBitmap(bmp, imageBuffer, w, h, false);
Image<Gray, byte> img = new Image<Gray, byte>(bmp);
Image<Rgb, byte> imgRgb = new Image<Rgb, byte>(img.Size);
CvInvoke.CvtColor(img, imgRgb, ColorConversion.BayerRg2Rgb);
CvInvoke.Imshow(camIndex.ToString(), imgRgb);
}

================================================

測試2:  相較測試1更簡單一些, 省略bitmap中介

1. 創建一個灰階Image<Gray, byte>, 總大小和imageBuffer一致

2. img.Bytes  = imageBuffer  <---- 這一行就是指向imageBuffer, 連複製一份都省了

3. 創建一個彩色Image<Rgb, byte> imgRgb

4. 用CvColor將資料進行轉換, BayerRg 轉成 Rgb 格式

private void GetBuffer(Byte[] imageBuffer, long width, long height, int camIndex)
{
int w = (int)width;
int h = (int)height;
Image<Gray, byte> img = new Image<Gray, byte>(w, h);
img.Bytes = imageBuffer;
Image<Rgb, byte> imgRgb = new Image<Rgb, byte>(img.Size);

CvInvoke.CvtColor(img, imgRgb, ColorConversion.BayerRg2Rgb);
CvInvoke.Imshow(camIndex.ToString(), imgRgb);
}

================================================

PylonDev.cs    <-- 封裝兩支 PylonDev  影像擷取

public 方法有 Open() Start() Grab() Stop()

CameraDev.cs <—兩支USB攝影機  同步 預覽/錄影/播放

接下來是如何讓CameraDev也支援PyloneDev影像來源,

而不是一般的USB攝影機

換句話說, 讓Basler相機繼承 原本 同步 預覽/錄影/播放 功能

public Mat GetBufferMat(int camIndex)    
{
return m_img[camIndex].Mat;
}

同時, 如果未來要讓CameraDev可以支援多種影像來源, 必須增加一個屬性設定

方便切換各家廠牌的攝影機

image

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(1) 人氣()