Попробуйте это:
CvSize dim = cvSize(int width, int height);
IplImage* dst = cvCreateImage( dim, 8, 3 );
IplImage* gray = cvCreateImage(dim, 8, 1);
// Load the gray scale image
cvMerge(gray , NULL, NULL, NULL, dst);
cvShowImage("gray",gray);
cvShowImage("dst",dst);
cvWaitKey(0);
Типы данных dst и grey должны быть одинаковыми. Вы не можете просто объединить число с плавающей точкой в матрицу uint. Для этого вам придется использовать cvScale.