Как установить свойство камеры в EmguCV - PullRequest
2 голосов
/ 07 ноября 2019

Используйте _capture.SetCaptureProperty(CapProp.Exposure, x) без ошибок, но не можете работать с моей камерой. Есть идея установить экспозицию в Emgucv.

Модель камеры: Basler (acA1300-30gm)

Спасибо.

* Без изменений после запуска кода.

_capture.SetCaptureProperty(CapProp.XiExposure, 30000.0);
_capture.SetCaptureProperty(CapProp.Exposure, 30000.0);
_capture.SetCaptureProperty(CapProp.XiExposureBurstCount, 30000.0);

Свойство камеры

1 Ответ

0 голосов
/ 12 ноября 2019

Я также обнаружил, что с камерами Basler свойства захвата не могут быть установлены, вместо того, чтобы кодировать свое приложение, вместо этого использовался бесплатный SDK среды выполнения Pylon для захвата кадров для передачи в Emgu CV. Следующие фрагменты этого проекта помогут вам начать:

using Basler.Pylon; // You'll need to add a reference to Basler.Pylon.DLL as well

var cam = new Camera();
cam.Open();
Console.WriteLine("Using camera {0}.", cam.CameraInfo[CameraInfoKey.SerialNumber]);
cam.Parameters[PLCamera.ExposureTimeAbs].SetValue(1000, FloatValueCorrection.ClipToRange);
cam.StreamGrabber.ImageGrabbed += OnImageGrabbed1;
cam.StreamGrabber.Start(GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber);

private void OnImageGrabbed1(object sender, ImageGrabbedEventArgs e)
{
    IGrabResult grabResult = e.GrabResult;
    if (grabResult.GrabSucceeded)
    {
        using (Bitmap bm = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb))
        {
            BitmapData bmpData = bm.LockBits(new Rectangle(0, 0, bm.Width, bm.Height), ImageLockMode.ReadWrite, bm.PixelFormat);
            converter.OutputPixelFormat = PixelType.BGRA8packed;
            IntPtr ptrBmp = bmpData.Scan0;
            converter.Convert(ptrBmp, bmpData.Stride * bm.Height, grabResult);
            bm.UnlockBits(bmpData);
            using (Image<Bgr, byte> imageCV = new Image<Bgr, byte>(bm))
            {
                // Example Emgu CV function
                double mean = CvInvoke.Mean(imageCV.Mat).V0;
            }
        }
    }
    else
    {
        LogMessage($"Camera 1 error: {grabResult.ErrorCode} {grabResult.ErrorDescription}");
    }
}

Я использовал этот код для обработки видео в реальном времени со скоростью 40 кадров в секунду с одной из их гигабитных камер, и производительность кажется хорошей.

...