C# 海康相机图像转化成Mat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static Mat Convert2Mat(MyCamera.MV_FRAME_OUT frameOut)
{
// 使用 Marshal.Copy 方法将指针指向的内存区域复制到 byte 数组中
byte[] buff = new byte[frameOut.stFrameInfo.nFrameLen];
Marshal.Copy(frameOut.pBufAddr, buff, 0, (int)frameOut.stFrameInfo.nFrameLen);

// 使用 OpenCVSharp 的 Mat 类型创建一个与图像数据大小相同的图像对象
Mat image = new Mat((int)frameOut.stFrameInfo.nHeight, (int)frameOut.stFrameInfo.nWidth, MatType.CV_8UC1);

// 将 byte 数据赋值给 Mat 对象的 Data 属性
Marshal.Copy(buff, 0, image.Data, (int)frameOut.stFrameInfo.nFrameLen);

// 如果需要将 BGR 图像格式转换为 RGB 格式,则可以使用下面的代码
Cv2.CvtColor(image, image, ColorConversionCodes.BGR2RGB);

return image;
}

MyCamera.MV_FRAME_OUT stFrameInfo = new MyCamera.MV_FRAME_OUT();

nRet = m_MyCamera.MV_CC_GetImageBuffer_NET(ref stFrameInfo, 1000);

1
2
3
4
5
if (nRet == MyCamera.MV_OK)
{
Mat mat = Convert2Mat(stFrameInfo);
Cv2.ImWrite("o.png", mat);
}

相机软触发

1
2
3
4
5
6
7
8
9
private void bnTriggerExec_Click(object sender, EventArgs e)
{
// ch:触发命令 | en:Trigger command
int nRet = m_MyCamera.MV_CC_SetCommandValue_NET("TriggerSoftware");
if (MyCamera.MV_OK != nRet)
{
ShowErrorMsg("Trigger Software Fail!", nRet);
}
}