diff --git a/SpinnakerCapture.cpp b/SpinnakerCapture.cpp index ae9b492..1b5fc44 100644 --- a/SpinnakerCapture.cpp +++ b/SpinnakerCapture.cpp @@ -41,14 +41,16 @@ SpinnakerCapture::SpinnakerCapture(QObject *parent) // Retrieve GenICam nodemap nodeMap = &pCam->GetNodeMap(); - CIntegerPtr ptrWidth = nodeMap->GetNode("Width"); - width = ptrWidth->GetValue(); - CIntegerPtr ptrHeight = nodeMap->GetNode("Height"); - height = ptrHeight->GetValue(); - CFloatPtr ptrExposureTime = nodeMap->GetNode("ExposureTime"); - exposureTime = ptrExposureTime->GetValue(); - qDebug()<< "Initialized Spinnaker compatible camera (" << width << "x" << height << ")"; + width = pCam->Width.GetValue(); + height = pCam->Height.GetValue(); + exposureTime = pCam->ExposureTime.GetValue(); + pixelFormat = pCam->PixelFormat.GetValue(); + qDebug() <<"Initialized Spinnaker compatible camera (" + << width << "x" << height + << pCam->PixelFormat.GetCurrentEntry()->GetSymbolic() + << ")"; + isInitialized = true; } catch (Spinnaker::Exception &e){ @@ -179,27 +181,36 @@ int SpinnakerCapture::acquireImages(unsigned int nImagesToCapture) // name a few. // - ImagePtr convertedImage = pResultImage->Convert(pixelFormat, NEAREST_NEIGHBOR); - - unsigned int XPadding = convertedImage->GetXPadding(); - unsigned int YPadding = convertedImage->GetYPadding(); - unsigned int rowsize = convertedImage->GetWidth(); - unsigned int colsize = convertedImage->GetHeight(); - - //image data contains padding. When allocating Mat container size, you need to account for the X,Y image data padding. int cvFormat; + ImagePtr convertedImage; switch(pixelFormat){ case PixelFormat_BGR8: + //we could also convert the format: + //convertedImage = pResultImage->Convert(Spinnaker::PixelFormatEnums(pixelFormat), NEAREST_NEIGHBOR); + convertedImage = pResultImage; cvFormat = CV_8UC3; break; + case PixelFormat_Mono8: + convertedImage = pResultImage; + cvFormat = CV_8UC1; + break; case PixelFormat_Mono16: - cvFormat = CV_16U; + convertedImage = pResultImage; + cvFormat = CV_16UC1; break; default: + convertedImage = pResultImage; cvFormat = CV_8UC3; } + unsigned int XPadding = convertedImage->GetXPadding(); + unsigned int YPadding = convertedImage->GetYPadding(); + unsigned int rowsize = convertedImage->GetWidth(); + unsigned int colsize = convertedImage->GetHeight(); + + //image data contains padding. When allocating Mat container size, you need to account for the X,Y image data padding. + cv::Mat cvMat = cv::Mat(colsize + YPadding, rowsize + XPadding, cvFormat, convertedImage->GetData(), convertedImage->GetStride()); emit(sendFrame(cvMat.clone())); diff --git a/SpinnakerCapture.h b/SpinnakerCapture.h index 5452e59..b7ddeb7 100644 --- a/SpinnakerCapture.h +++ b/SpinnakerCapture.h @@ -21,7 +21,7 @@ class SpinnakerCapture : public QObject unsigned int width = 0; unsigned int height = 0; float exposureTime = 0; - PixelFormatEnums pixelFormat = PixelFormat_Mono16; //PixelFormat_BGR8 + int64_t pixelFormat; //PixelFormat_BGR8 ~SpinnakerCapture(); private: CameraPtr pCam;