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