2013-04-05 4 views
1

Je souhaite utiliser OpenCV pour effectuer des traitements sur des images rectifiées à partir de la caméra Bumblebee2. J'utilise FlyCapture2 et Triclops pour saisir des images du capteur et les rectifier. Je veux convertir le TriclopsColorImage en un cv :: Mat à utiliser avec OpenCV.Conversion d'une image de Triclops en image RVB opencv Mat.

De l'objet TriclopsColorImage je peux obtenir ce qui suit:

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 

Je ne sais pas comment convertir ces informations en cv :: l'image Mat afin que je puisse travailler. Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

2

Je n'ai pas testé cela et je ne sais pas quelle version d'OpenCV vous utilisez, mais quelque chose comme ce qui suit devrait vous orienter dans la bonne direction. Donc, en supposant que vos noms de variable de la question:

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); 
+0

Merci! Fonctionne comme un charme. Je viens d'arriver avec une solution de rechange que j'ai posté ci-dessous comme une alternative au cas où quelqu'un veut savoir. – Jompa234

0

Solution alternative Je suis venu au bout d'un moment.

// 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);