C# 巴斯勒相机图像OpenCV3
我想用巴斯勒相机在C#中的WinForm上放一个图片盒。 但是我想把图像转换成Mat。因为我想用垫子把它插入图片盒 请告诉我您的提示或解决方案C# 巴斯勒相机图像OpenCV3,c#,opencvsharp,C#,Opencvsharp,我想用巴斯勒相机在C#中的WinForm上放一个图片盒。 但是我想把图像转换成Mat。因为我想用垫子把它插入图片盒 请告诉我您的提示或解决方案 PixelDataConverter converter = new PixelDataConverter(); public Form1() { InitializeComponent(); using (Camera camera = new Camera()) { c
PixelDataConverter converter = new PixelDataConverter();
public Form1() {
InitializeComponent();
using (Camera camera = new Camera())
{
camera.CameraOpened += Configuration.AcquireContinuous;
camera.Open();
camera.Parameters[PLCameraInstance.MaxNumBuffer].SetValue(5);
camera.StreamGrabber.Start();
IGrabResult grabResult = camera.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
using (grabResult)
{
if (grabResult.GrabSucceeded) {
Mat rtnMat = convertToMat(grabResult);
Cv2.ImShow("test", rtnMat);
pictureBox1.Image = BitmapConverter.ToBitmap(frame);
}
}
camera.StreamGrabber.Stop();
camera.Close();
}
}
private Mat convertToMat(IGrabResult rtnGrabResult) {
IImage image = rtnGrabResult;
converter.OutputPixelFormat = PixelType.BGR8packed;
byte[] buffer = image.PixelData as byte[];
return new Mat(rtnGrabResult.Width, rtnGrabResult.Height, MatType.CV_8UC1, buffer);
}
巴士勒图片:
OpenCvSharp图像:
以下是将IGrabResult转换为OpenCvSharp.Mat的正确方法。 我没有在没有转换器的情况下尝试,但您的主要问题是新Mat(..)参数的顺序。在OpenCV中,首先声明行,然后声明列。这意味着首先是高度,然后是宽度。而且彩色图像的MatType也是错误的,如@Nyerguds所说。它必须是CV_8UC3 更正代码:
private Mat convertToMat(IGrabResult rtnGrabResult) {
converter.OutputPixelFormat = PixelType.BGR8packed;
byte[] buffer = new byte[conv.GetBufferSizeForConversion(rtnGrabResult];
converter.Convert(buffer, rtnGrabResult);
return new Mat(rtnGrabResult.Height, rtnGrabResult.Width, MatType.CV_8UC3, buffer);
}
所以实际问题是什么?代码不起作用吗?Basler图像是所需的图像。但它看起来像OpenCvSharp图像。这对我来说似乎是一个步幅问题。。。您应该能够以某种方式从该数据中获得跨步()。如果你不能给Mat构造器一个跨步,你可能需要压缩字节数据来去除任何填充。不过,这不仅仅是跨步。。。那里的图像明显增加了三倍。从规格来看,
CV_8UC1
表示8位单通道阵列(灰度),而BGR8packed
表示24位RGB,因此显然不匹配。另外,您有这个PixelDataConverter
对象,但实际上似乎并没有在任何地方使用它。您确定这是从相机返回的RGB图像吗?对我来说,它看起来像灰度图像,因此PixelType.BGR8packed不正确,因此您看到的是三重图像,而不是彩色图像。