code: def rgb_to_hsv(rgb):
      
      # Translated from source of colorsys.rgb_to_hsv
      # r,g,b should be a numpy arrays with values between 0 and 255
      # rgb_to_hsv returns an array of floats between 0.0 and 1.0.
      rgb = rgb.astype('float')
      hsv = np.zeros_like(rgb)
      # in case an RGBA array was passed, just copy the A channel
      hsv[..., 3:] = rgb[..., 3:]
      r, g, b = rgb[..., 0], rgb[..., 1], rgb[..., 2]
      maxc = np.max(rgb[..., :3], axis=-1)
      minc = np.min(rgb[..., :3], axis=-1)
      hsv[..., 2] = maxc
      mask = maxc != minc
      hsv[mask, 1] = (maxc - minc)[mask] / maxc[mask]
      rc = np.zeros_like(r)
      gc = np.zeros_like(g)
      bc = np.zeros_like(b)
      rc[mask] = (maxc - r)[mask] / (maxc - minc)[mask]
      gc[mask] = (maxc - g)[mask] / (maxc - minc)[mask]
      bc[mask] = (maxc - b)[mask] / (maxc - minc)[mask]
      hsv[..., 0] = np.select([r == maxc, g == maxc], [bc - gc, 2.0 + rc - bc], default=4.0 + gc - rc)
      hsv[..., 0] = (hsv[..., 0] / 6.0) % 1.0
      return hsv
docs: Input RGB image [0~255] return HSV image [0~1].
  
      Parameters
      ------------
      rgb : numpy.array
          An image with values between 0 and 255.
  
      Returns
      -------
      numpy.array
          A processed image.