OpenCV: Multiplicar imágenes en C ++ y C

Acabo de usar las funciones de multiplicación usando C api (cvMul) y C ++ api (mul y multiply). Pero obtengo un resultado diferente de la función C y las funciones C ++

Resultado de cvMul (es una imagen blanca)Resultado de mul y multiplica

Aquí está el código que uso para ambas implementaciones:

C

IplImage * gh = cvCreateImage(cvGetSize(input),IPL_DEPTH_32F,1) ;
cvSobel(input,gh,1,0) ;

IplImage * gh2 = cvCreateImage(cvGetSize(input),IPL_DEPTH_32F,1) ;
cvMul(gh,gh,gh2) ;

C ++

Mat gh = Mat (input.size(), CV_32FC1);
Sobel(input, gh, CV_32FC1, 1, 0);

Mat gh2 = Mat (input.size(), CV_32FC1);
gh2 = gh.mul(gh); // multiply (gh, gh, gh2);  

La imagen de entrada es la misma, y cuando verifico el gradiente horizontal también es igual para ambas implementaciones, entonces, ¿por qué la multiplicación daría resultados diferentes? (Estoy interesado en obtener el resultado de la implementación de C)