1

我想使用 OpenCV 对来自 Bumblebee2 相机的校正图像进行一些处理。我正在使用 FlyCapture2 和 Triclops 从传感器中抓取图像并进行校正。我想将 TriclopsColorImage 转换为 cv::Mat 以与 OpenCV 一起使用。

从 TriclopsColorImage 对象我可以得到以下信息:

int nrows; // The number of rows in the image
int ncols; //The number of columns in the image
int rowinc; //The row increment of the image
unsigned char * blue; //pixel data for the blue band of the image
unsigned char * red;  //pixel data for the red band of the image
unsigned char * green; //pixel data for the green band of the image

我不知道如何将此信息转换为 cv::Mat 图像以便我可以处理它。有人可以指出我正确的方向吗?

4

2 回答 2

2

我没有对此进行测试,也不知道您使用的是哪个版本的 OpenCV,但类似以下内容应该可以为您指明正确的方向。因此,假设您的变量名称来自问题:

cv::Mat R(nrows, ncols, CV_8UC1, red, rowinc);
cv::Mat G(nrows, ncols, CV_8UC1, green, rowinc);
cv::Mat B(nrows, ncols, CV_8UC1, blue, rowinc);

std::vector<cv::Mat> array_to_merge;

array_to_merge.push_back(B);
array_to_merge.push_back(G);
array_to_merge.push_back(R);

cv::Mat colour;

cv::merge(array_to_merge, colour);
于 2013-04-05T13:00:18.060 回答
0

一段时间后我想出了替代解决方案。

   // Create a cv::Mat to hold the rectified color image. 
   cv::Mat cvColorImage(colorImage.nrows, colorImage.ncols,CV_8UC3);

   unsigned char* bp = colorImage.blue;
   unsigned char* rp = colorImage.red;
   unsigned char* gp = colorImage.green;

   for(int row = 0; row< colorImage.nrows; row++){

       for( int col =0; col< colorImage.rowinc; col++){

            //printf("%u %u %u ",*bp,*rp,*gp);
            bp++;
            rp++;
            gp++;

            cvColorImage.at<cv::Vec3b>(row,col)[0] = *bp;

            cvColorImage.at<cv::Vec3b>(row,col)[1] = *gp;

            cvColorImage.at<cv::Vec3b>(row,col)[2] = *rp;

       }
       cout << endl;
   }

   imshow("colorimage", cvColorImage);
   waitKey(300);
于 2013-04-05T14:18:57.510 回答