OpenCvSharp之利用海康相机采集图像并在pictureBox中显示
说明:OpenCvSharp版本为4.0
海康相机为黑白相机
实现功能:将海康相机采集的图像转成Mat,并在pictureBox中显示。
示例代码:
Mat srcImage;
private Mat CaptureImage()
{
int nRet;
//MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
UInt32 nPayloadSize = 0;
nRet = m_pMyCamera.MV_CC_GetIntValue_NET("PayloadSize", ref stParam);
if (MyCamera.MV_OK != nRet)
{
return null;
}
nPayloadSize = stParam.nCurValue;
if (nPayloadSize > m_nBufSizeForDriver)
{
m_nBufSizeForDriver = nPayloadSize;
m_pBufForDriver = new byte[m_nBufSizeForDriver];
m_nBufSizeForSaveImage = m_nBufSizeForDriver * 3 + 2048;
m_pBufForSaveImage = new byte[m_nBufSizeForSaveImage];
}
IntPtr pData = Marshal.UnsafeAddrOfPinnedArrayElement(m_pBufForDriver, 0);
MyCamera.MV_FRAME_OUT_INFO_EX stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();
nRet = m_pMyCamera.MV_CC_GetOneFrameTimeout_NET(pData, m_nBufSizeForDriver, ref stFrameInfo, 1000);//获取一帧图像,延时时间设置为1000
if (MyCamera.MV_OK != nRet)
{
return null;
}
//转成Mat图像
srcImage = new Mat(stFrameInfo.nHeight, stFrameInfo.nWidth, MatType.CV_8UC1, pData);
return srcImage;
}
//点击按钮,在pictureBox上显示图像
private void btnShow_Click(object sender, EventArgs e)
{
Mat srcImage = new Mat();
//灰度图转BRG(也可以不转)
Cv2.CvtColor(CaptureImage(), srcImage, ColorConversionCodes.GRAY2BGR);
//在pictureBox上显示
pictureBox1.Image = srcImage.ToBitmap();
}
注:我用的是黑白相机,所以中的MatType选择的CV_8UC1,如果是彩色相机则选择CV_8UC3。
关于MatType的补充说明
MatType的格式:CV_<bit_depth>(S|U|F)C<number_of_channels>
(1)bit_depth --- 比特数 --- 代表8bite,16bites,32bites,64bites --- 比如:
如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对应的就是CV_8
(2)S|U|F
S--代表---signed int---有符号整形
U--代表--unsigned int--无符号整形
F--代表--float---------单精度浮点型
(3)C<number_of_channels> ---- 代表 --- 一张图片的通道数,比如:
1--灰度图片--grayImg---是--单通道图像
2--RGB彩色图像---------是--3通道图像
3--带Alph通道的RGB图像--是--4通道图像
关于详细解释可参考:OpenCvSharp中CV_8UC1,CV_8UC2等参数的解释