The line you specified creates an array of two Mat objects. The first object is the padded image of the original image (padding means adding a black border to the original image in order to make it optimal size for find the DFT as it should be a factor of 2 I guess). The second object is simply a black image which's the size is equal to padded image. This part will be used to store the complex part of the DFT image. Finally the two images in the planes are correspond to real and complex images of DFT. The function
merge
is used to create a two channel image out of the two planes.
Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)};</float>
You can change the type "float" to higher precision if you wish but do not use a type with lower precisions.