100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C# + EmguCV + 海康威视工业相机采集IntPtr类型图片数组转换

C# + EmguCV + 海康威视工业相机采集IntPtr类型图片数组转换

时间:2023-09-27 05:08:39

相关推荐

C# + EmguCV + 海康威视工业相机采集IntPtr类型图片数组转换

网上查到的资料都不能直接用,看的头大,自己琢磨后整理如下

连接相机采集图片

这里不多赘述,参考MVS软件安装目录下的C# demo和开发文档

本文以海康CA060-10GC彩色相机为例,需要设置相机采集像素格式为RGB8

IntPtr图片数据转换

//根据官方demo采集图片,前面还需要进行连接相机等工作hkccd.MV_CC_StartGrabbing_NET();MyCamera.MV_FRAME_OUT frameOut = new MyCamera.MV_FRAME_OUT();//海康SDK能做的就到此为止,给你一个MV_FRAME_OUT结构体int nRet = hkccd.MV_CC_GetImageBuffer_NET(ref frameOut, 1000);//方法一:先把IntPrt转为byte数组,再转为Image类型int picWidth = frameOut.stFrameInfo.nWidth;int picHeight = frameOut.stFrameInfo.nHeight;byte[] picBuff = new byte[picWidth * picHeight * 3];Marshal.Copy(frameOut.pBufAddr, picBuff, 0, picBuff.Length);//相机采集到的原图为RGB颜色空间,转为BGR才能用for (int i = 0; i < picHeight; i++){for (int j = 0; j < picWidth; j++){byte chRed = picBuff[i * picWidth * 3 + j * 3];picBuff[i * picWidth * 3 + j * 3] = picBuff[i * picWidth * 3 + j * 3 + 2];picBuff[i * picWidth * 3 + j * 3 + 2] = chRed;}}Image<Bgr, byte> img = new Image<Bgr, byte>(picWidth, picHeight);img.Bytes = picBuff;CvInvoke.Imwrite("image.bmp", img);//保存的图片正常就成功了//方法二:通过Mat构造函数把IntPtr传进去Mat srcImg = new Mat(new Size(picWidth, picHeight), DepthType.Cv8U, 3, frameOut.pBufAddr,picWidth*3);Mat dstImg = new Mat();//一样需要RGB转BGRCvInvoke.CvtColor(srcImg, dstImg, ColorConversion.Rgb2Bgr);CvInvoke.Imwrite("mat.bmp", dstImg );//保存的图片正常就成功了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。