Но вы читаете реальное изображение или пытаетесь работать с пустыми матрицами? Это способ разделения изображения BGR на 3 отдельные матрицы, изменения положения синего и красного каналов и последующего их объединения:
cv::Mat inputImage = cv::imread( "img.png",CV_LOAD_IMAGE_COLOR ); //load image
cv::Mat BGRchannels[3]; //destination matrices
cv::split( inputImage , BGRchannels );//split source
//show the individual channels:
cv::imshow( "B", BGRchannels[0] ); //blue channel
cv::imshow( "G", BGRchannels[1] ); //green channel
cv::imshow( "R", BGRchannels[2] ); //red channel
//merge the channels back:
std::vector<cv::Mat> tempMats; //vector of temp mats
//change the order of the B and R channels:
tempMats.push_back( BGRchannels[2] );
tempMats.push_back( BGRchannels[1] );
tempMats.push_back( BGRchannels[0] );
cv::Mat mergedBGR; //output matrix
cv::merge( tempMats, mergedBGR ); //merge the matrices
//show the merged mat, with the B & R channels interchanged:
cv::imshow( "mergedMat", BGRchannels[2] );