import numpy as np import rasterio from rasterio.plot import show import cv2 def read_pansharpened_rgb(file_path): with rasterio.open(file_path) as src: # Read all bands image = src.read() # Check the number of bands num_bands = image.shape[0] if num_bands >= 3: # If we have 3 or more bands, use the first three as RGB rgb_image = image[:3] else: raise ValueError(f"The image has only {num_bands} bands. At least 3 bands are required for RGB.") # Transpose the image to have the bands as the last dimension rgb_image = np.transpose(rgb_image, (1, 2, 0)) # Normalize each band separately r = normalize_band(rgb_image[:,:,0]) g = normalize_band(rgb_image[:,:,1]) b = normalize_band(rgb_image[:,:,2]) # Combine the normalized bands rgb_normalized = np.dstack((r, g, b)) return rgb_normalized def normalize_band(band): """Normalize a single band to 0-255 range.""" min_val = np.min(band) max_val = np.max(band) if max_val > min_val: normalized = ((band - min_val) / (max_val - min_val) * 255).astype(np.uint8) else: normalized = np.zeros_like(band, dtype=np.uint8) return normalized # Example usage # Display the image using matplotlib