這裏主要提供了Bumblebee相機Triclops SDK中自定義的Image、TriclopsImage、TriclopsColorImage等圖片格式與OpenCV的Mat格式之間的轉換方法。只要理解了相應的圖片格式的定義和API函數的使用方法,不同格式間的轉換其實很簡單。
因爲博主只用到了Triclops轉到Mat格式,所以Mat格式到Triclops相關格式的轉換方法並未過多研究,如有需要可參考這位大佬的博客:OpenCV IplImage FlyCapture2 Image Conversion 兩種圖像類的相互轉化
Triclops轉Mat:
//TriclopsColorImage to Mat
int convertTriclops2Opencv(TriclopsColorImage& inImage, cv::Mat& cvImage) {
cv::Mat imageRGBA(inImage.nrows, inImage.ncols, CV_8UC4, inImage.data->value, inImage.rowinc);
cvtColor(imageRGBA, cvImage, CV_RGBA2BGR);
}
//TriclopsImage to Mat
int convertTriclops2Opencv(TriclopsImage& inImage, cv::Mat& cvImage)
{
cvImage = cv::Mat(inImage.nrows, inImage.ncols, CV_8UC3, inImage.data, inImage.rowinc);
}
//TriclopsImage16 to Mat
int convertTriclops2Opencv(TriclopsImage16& inImage,cv::Mat& cvImage)//16位灰度圖
{
cvImage = cv::Mat(inImage.nrows, inImage.ncols, CV_16UC1, inImage.data, inImage.rowinc);
}
//Image to Mat
int convertTriclops2Opencv(FlyCapture2::Image& inImage, cv::Mat& cvImage)
{
unsigned int rowBytes = (double)inImage.GetReceivedDataSize() / (double)inImage.GetRows();
cvImage = cv::Mat(inImage.GetRows(), inImage.GetCols(), CV_8UC3, inImage.GetData(), rowBytes);
}
Mat轉Triclops:
//Mat to Image
int convertOpencv2Triclops(cv::Mat& cvImage, FlyCapture2::Image& outImage)
{
unsigned int imgStride = cvImage.step;
int sizeImg = cvImage.rows * cvImage.cols * int(cvImage.elemSize());
outImage.SetDimensions(cvImage.rows, cvImage.cols, imgStride, FlyCapture2::PIXEL_FORMAT_BGR, FlyCapture2::NONE);
}