的疑问:
是否可以通过简单的方式将cv::Mat
投射到ipcMatrix<ipcRGB>
?
答案 0 :(得分:2)
将cv::Mat
转换为其他数据类型的秘诀是了解数据(像素)的存储和排序方式:
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);