Actually, your problem should not be CV or PIL, because if you provide a numpy, they will have the same result sometimes.
Here your code to convert to RGB is correct and PIL just duplicate the gray channel twice and concatenate them to make it 3 channel image.
Try this code and please print errors (it is hard to track without having errors):
import numpy as np

print(np.array(image = Image.open(img_name + ‘.png’)).shape)