我想使用分配在其他地方的数据创建一个 OpenCV 3 通道 Mat,每个通道的像素都在一起,这与 OpenCV Mat 的数据不同,其中来自不同通道的数据是交错的。
Mat outputMat = Mat(dimY, dimX, CV_8UC3, rawData);
// This works only if rawData interleaves channel data like an OpenCv Mat
有没有一种方法可以创建 OpenCV Mat,而不必求助于以下从临时 Mat 中拆分通道并将正确的通道数据复制到相应位置的解决方案?
void createMat(unsigned char *rawData, unsigned int dimX, unsigned int dimY)
{
Mat outputMat = Mat(dimY, dimX, CV_8UC3);
// use outputMat to draw some stuff
Mat channelR = Mat(dimY, dimX, CV_8UC1, rawData);
Mat channelG = Mat(dimY, dimX, CV_8UC1, rawData + dimX * dimY);
Mat channelB = Mat(dimY, dimX, CV_8UC1, rawData + 2 * dimX * dimY);
std::vector<Mat> channels(3);
split(outputMat, channels);
channels[2].copyTo(channelR);
channels[1].copyTo(channelG);
channels[0].copyTo(channelB);
}
我需要经常做这个操作,所以我想知道是否有一个不涉及每次调用split()
and函数的解决方案。copyTo()
谢谢!