OpenCV使用像素指针构建图像

OpenCV build an image with pixel Pointer

本文关键字:构建 图像 指针 像素 OpenCV      更新时间:2023-10-16

我正在尝试将OPENCV程序实现到现有程序中。在此程序中,相机捕获了图像,我可以通过指向图像的第一个像素的指针访问此图像。我的问题现在是,我如何从openCV可以使用的信息(指向第一个像素,宽度和图像的宽度)中构建图像。

我希望我的问题清楚地描述了。

你有任何想法吗?

     cv::Mat aCameraImage = cv::Mat(cv::Size(getImageWidth(), getImageHeight()), CV_8UC1, getImageDataPtr());
     if (!aCameraImage.empty())
     {
       cv::imshow("Camera Image", aCameraImage);
       cv::waitKey(100);
     }
     for(int i = 0; i<aCameraImage.cols; i++ )
     {
        for(int j = 0; j<aCameraImage.rows; j++ )
        {
            std::cout << aCameraImage.at<uchar>(i,j) << " ";
        }
        std::cout << std::endl;
     }

有一个SDK,我想您正在使用它。您会创建这样的结构吗?

IMAGE_INFO *ImageInfo = new IMAGE_INFO; 
ImageInfo->ImageData  = Image_getDataPointer(Image); 
ImageInfo->SizeX      = Image_getSizeX(Image); 
ImageInfo->SizeY      = Image_getSizeY(Image); 
ImageInfo->PixelType  = Image_getPixelType(Image); 
ImageInfo->ImageID    = Image_getImageID(Image); 

SDK表示,相机可能会提供12位编码图像。请检查PixelType并告诉我什么是。

enum   GVSP_PIXEL_TYPE { 
   GVSP_PIX_UNKNOWN = 0x0000, 
   GVSP_PIX_MONO8 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0001),
   GVSP_PIX_MONO10 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0003), 
   GVSP_PIX_MONO10_PACKED = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0004), 
   GVSP_PIX_MONO12 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0005),
   GVSP_PIX_MONO12_PACKED = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY12BIT | 0x0006), 
   GVSP_PIX_MONO16 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0007), 
   GVSP_PIX_BAYGR8 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0008), 
   GVSP_PIX_BAYRG8 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x0009), 
   GVSP_PIX_BAYGB8 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x000A),
   GVSP_PIX_BAYBG8 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT | 0x000B), 
   GVSP_PIX_BAYGR10 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000C),
   GVSP_PIX_BAYRG10 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000D), 
   GVSP_PIX_BAYGB10 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000E), 
   GVSP_PIX_BAYBG10 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x000F), 
   GVSP_PIX_BAYGR12 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0010), 
   GVSP_PIX_BAYRG12 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0011), 
   GVSP_PIX_BAYGB12 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0012), 
   GVSP_PIX_BAYBG12 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY16BIT | 0x0013), 
   GVSP_PIX_RGB24 = (GVSP_PIX_RGB | GVSP_PIX_OCCUPY24BIT), 
   GVSP_PIX_GRAY8 = (GVSP_PIX_MONO | GVSP_PIX_OCCUPY8BIT) 
 } 

您可以使用一些提供的功能转换图像:

Image_getImage12bitAs8bit(Camera, Buffer8bit, BufferLength); 
Image_getImage12bitAs16bit(Camera, Buffer16bit, BufferLength); 
//Image_getImage16bitAs8bit(Camera, Buffer8bit, BufferLength); 

之后,您可以使用CV_8UC1CV_16UC1

您可以进一步提供这些功能的结果吗?

  • StreamingChannel_getPixelType()
  • StreamingChannel_getBufferdata()
  • StreamingChannel_getBuffersize()
  • streamingchannel_getimagepitch()
  • streamingchannel_getimagesizex()
  • streamingchannel_getimagesizey()