将cv :: Mat转换为ipcMatrix <ipcrgb> </ipcrgb>

时间:2014-11-25 19:32:02

标签: c++ opencv image-processing casting

的疑问:

是否可以通过简单的方式将cv::Mat投射到ipcMatrix<ipcRGB>

1 个答案:

答案 0 :(得分:2)

cv::Mat转换为其他数据类型的秘诀是了解数据(像素)的存储和排序方式:

  • OpenCV将数据存储在cv::Mat中,作为unsigned char的数组,像素存储在 BGR 顺序中;
  • ipcMatrix<ipcRGB>几乎以同样的方式工作,除了像素存储为 RGB ;

也就是说,要将cv::Mat转换为ipcMatrix<ipcRGB>,您需要做的就是:

// Load input image
cv::Mat mat_input = cv::imread("input.jpg");

// Convert a BGR Mat into RGB:
cv::Mat mat_rgb;
cv::cvtColor(mat_input, mat_rgb, cv::COLOR_BGR2RGB);

// Copy the pixels from the Mat to another memory location:
int data_sz = mat_rgb.rows * mat_rgb.cols * mat_rgb.channels();
unsigned char* pixels = new unsigned char[data_sz];    
memcpy(pixels, mat_rgb.data, data_sz);

// And finally, use the constructor of ipcMatrix<> to declare the new object correctly:
ipcMatrix<ipcRGB> input = ipcMatrix<ipcRGB>(mat_rgb.cols, mat_rgb.rows, (ipcRGB*)pixels);