OpenCV to FlyCapture2 Image

OpenCV to FlyCapture2 Image

本文关键字:Image FlyCapture2 to OpenCV      更新时间:2023-10-16

我有一个大黄蜂2,我正在使用flycapture SDK来捕捉传入的图像。然后,我将左侧的flycapture2图像转换为openCV格式,以便对其进行一些基本操作。然后,我想将其反馈到Flycapture SDK中,但我似乎不知道如何操作。要从Flycapture转换为OpenCV,我需要执行以下操作:

FlyCapture2::Image cf2Img; 
grabbedImage.Convert(FlyCapture2::PIXEL_FORMAT_BGR, &cf2Img ); 
unsigned int rowBytes = (double)cf2Img.GetReceivedDataSize()/(double)cf2Img.GetRows(); 
cv::Mat cvImage = cv::Mat( cf2Img.GetRows(), cf2Img.GetCols(), CV_8UC3, cf2Img.GetData(), rowBytes ); 

然后我进行操作(阈值处理/轮廓检测/背景去除等),然后我想将此图像反馈到Flycapture中。我试图把它转换回来,但没有成功。

有人有任何他们以前使用过的代码将OpenCV格式带回Flycapture吗?

我在灰点工作,我会尽力在这里提供帮助。请注意,尽管您可以通过我们的支持网站ptgray.com/support/直接与我们联系,我们也可以帮助您。

查看您所附的代码和openCV源代码,当您制作cvImage时,您只是将指针重新分配给数据,而不是制作数据的实际副本。

因此,只要数据的大小保持不变(即保持每像素24位),您对openCV图像所做的任何更改都应该反映在flycapture(cf2mg)数据中,并且能够正确保存。

如果您能解释您在尝试移回flycapture图像时遇到的问题,或者向我们发送您如何操作的源代码,我们可以进一步帮助您。

总之,我希望在您提供的代码之后,您对cvImage所做的任何操作都应该反映在cf2Img中,而不需要转换回,假设您没有更改图像的位深度。

我希望这会有所帮助,但请让我知道我是否可以帮助澄清任何事情,或者你是否可以提供一个无法转换回fc2的例子。

谢谢,点灰支持

我用FlyCapture2 v2.13.3.61_x64和Visual Studio:解决了灰度级8位深度图像的问题

  using namespace FlyCapture2;
  [...]   
 
  Camera cam;
  [...] 
  // Acquire the image 
  cam.RetrieveBuffer(&image);
  if (error != PGRERROR_OK)
  {
    PrintError(error);
    break;
  }
  // Copy FlyCapture2 image into OpenCV struct
  // convert to rgb
  Image rgbImage;
  image.Convert( FlyCapture2::PIXEL_FORMAT_BGR, &rgbImage );
  // convert to OpenCV Mat
  unsigned int rowBytes = 
           (double)rgbImage.GetReceivedDataSize()/(double)rgbImage.GetRows();
       
  cv::Mat img = cv::Mat(rgbImage.GetRows(), rgbImage.GetCols(), CV_8UC3, 
                        rgbImage.GetData(),rowBytes);
  // show the captured image
  cv::imshow("image", img);
  key = cv::waitKey(30);   

这对我也有好处:


using namespace FlyCapture2;
const int col_size   = 24;
const int row_size   = 480;
const int data_size  = row_size * col_size;
[...]
// Grab camera grayscale image and convert into
// an OpenCV image
void GrabImages( Camera* pcam,
                 IplImage* pimg,
                 IplImage* pimg_bw,
                 CvMemStorage* pstorage,
                 int cnt )
{
    Image image;
    [...]
 
    // Retrieve image before starting main loop
    Error error = pcam->RetrieveBuffer( &image );
    if ( error != PGRERROR_OK )
    {
        // TODO.
    }
 
    // Copy FlyCapture2 image into OpenCV struct
    memcpy( pimg->imageData, image.GetData(), data_size );
 
    // Save the bitmap to file
    cvSaveImage( "orig.bmp", pimg );
    [...]