3通道垫我想使用其他地方分配的数据以创建一个OpenCV的3通道垫,其中每个信道的像素是在一起的,不象一个OpenCV的毡中的数据,其中来自不同信道的数据是交错的。OpenCV的创建从连续数据阵列
Mat outputMat = Mat(dimY, dimX, CV_8UC3, rawData);
// This works only if rawData interleaves channel data like an OpenCv Mat
有一种方法,而不必诉诸于分割信道从临时垫下面的溶液和右声道数据拷贝到相应的位置以创建的OpenCV垫?
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()
和copyTo()
功能每次的解决方案。
谢谢!
'merge(channels,outputMat)'? –
我已经尝试过,但似乎没有工作。正确的数据不会进入正确的渠道。它仍然是交错的。 – locke14
你的问题对我来说并不清楚,你想从OpenCV mat获得'RGB'通道吗? – ZdaR