@ptrblck I got it fixed.  The issue was that self.shared_array was float32.  I originally tried to fix this by trying to instantiate it as uint8 like so:
       shared_array_base = mp.Array(ctypes.c_uint, len(self.df)*c*h*w)
       shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())


but that was not enough.  np.ctypeslib.as_array() does not have a dtype parameter, and I would have thought Numpy would do the c-type to dtype conversion automatically but it does not, and so the above just ended up creating it as uint32.  So I had to coerce it to uint8. Once I did that it now displays images.  I have not fully tested out the cache functionality yet, but I plan to do that now that I can put a good image in and get a good image out.  My changed code is below:
       shared_array_base = mp.Array(ctypes.c_uint, len(self.df)*c*h*w)
        shared_array = np.ctypeslib.as_array(shared_array_base.get_obj())
        self.shared_array = shared_array.reshape(len(self.df), h, w, c)
        self.shared_array = self.shared_array.astype("uint8")
        self.use_cache = False
        
    def __getitem__(self, index):
        if not self.use_cache:
            im_path = os.path.join(self.imfolder, self.df.iloc[index]['image_name'] + '.jpg')
            x = cv2.imread(im_path)
            x = cv2.cvtColor(x, cv2.COLOR_BGR2RGB)
            self.shared_array[index] = x
        x = self.shared_array[index]