将图像从Triclops转换为opencv RGB图像Mat。

时间:2013-04-05 11:27:53

标签: visual-c++ opencv

我想使用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图像,以便我可以处理它。有人可以指点我正确的方向吗?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);