CMvdImage InputImage = new CMvdImage();
Stopwatch sw = new Stopwatch();
HObject image = new HObject();
IntPtr imageBuffer = IntPtr.Zero;
int width, height, chanles;
if (cams[0].GetImage(out width, out height, out chanles, out imageBuffer))
{
HOperatorSet.GenImage1(out image, "byte", width, height, imageBuffer);
sw.Restart();
HOperatorSet.WriteImage(image, "jpg", 0, "E:\\百度网盘下载\\1.jpg");
Console.WriteLine($"halcon1:{sw.ElapsedMilliseconds}毫秒");
MVD_IMAGE_DATA_INFO imageDataStruct = new MVD_IMAGE_DATA_INFO();
imageDataStruct.stDataChannel[0].nRowStep = Convert.ToUInt32(width);
imageDataStruct.stDataChannel[0].nLen = Convert.ToUInt32(width * height);
imageDataStruct.stDataChannel[0].nSize = Convert.ToUInt32(width * height);
//IntPtr 转 byte[]
int size = Convert.ToInt32(width * height);
byte[] managedArray = new byte[size];
Marshal.Copy(imageBuffer, managedArray, 0, size);
imageDataStruct.stDataChannel[0].arrDataBytes = managedArray;
InputImage.InitImage((uint)width, (uint)height, VisionDesigner.MVD_PIXEL_FORMAT.MVD_PIXEL_MONO_08, imageDataStruct);
sw.Restart();
InputImage.SaveImage("E:\\百度网盘下载\\3.bmp");
Console.WriteLine($"CMvdImage:{sw.ElapsedMilliseconds}毫秒");
//另外备注一下 byte[] 转 IntPtr
HOperatorSet.GenImage1(out image, "byte", width, height, ArrToPtr(managedArray));
sw.Restart();
HOperatorSet.WriteImage(image, "jpg", 0, "E:\\百度网盘下载\\2.jpg");
Console.WriteLine($"halcon2:{sw.ElapsedMilliseconds}毫秒");
//用OpenCv
Mat srcImage = new Mat(height, width, MatType.CV_8UC1, imageBuffer);
sw.Restart();
srcImage.ImWrite("E:\\百度网盘下载\\22.jpg");
Console.WriteLine($"OpenCv:{sw.ElapsedMilliseconds}毫秒");
OpencvSharp需要命名空间

该代码段展示了使用Halcon和OpenCV进行图像读取、转换和保存的效率测试。通过Stopwatch计时,比较了Halcon的GenImage1,WriteImage函数与CMvdImage类以及OpenCV的Mat类型进行图像操作的耗时。结果显示了不同方法在处理时间上的差异。
1188

被折叠的 条评论
为什么被折叠?



