GCP技术问询:如何用Python将GCS图片读取至Datalab的OpenCV
在Datalab中从GCS读取图片到OpenCV的方法
我之前处理GCS图片时也碰到过类似的困惑,毕竟大部分资料都聚焦在文本文件的读取上。其实有两种实用的方案可以解决这个问题,下面给你一步步说明:
方法一:通过临时文件中转读取
这个方法比较直观,先把GCS上的图片下载到Datalab的临时文件里,再用OpenCV读取,适合新手快速上手:
- 首先确保安装了GCS的Python客户端库(如果还没装的话):
!pip install google-cloud-storage
- 编写代码实现读取:
from google.cloud import storage import cv2 import numpy as np import tempfile import os # 初始化GCS客户端 storage_client = storage.Client() # 替换成你的bucket名称和图片路径 bucket_name = "your-gcs-bucket" image_blob_path = "images/sample.jpg" # 获取GCS中的图片对象 bucket = storage_client.get_bucket(bucket_name) image_blob = bucket.blob(image_blob_path) # 创建临时文件存储下载的图片 with tempfile.NamedTemporaryFile(suffix=".jpg", delete=False) as temp_img_file: image_blob.download_to_file(temp_img_file) temp_file_path = temp_img_file.name # 用OpenCV读取临时文件 img = cv2.imread(temp_file_path) # 在Datalab中显示图片(如果是兼容Colab的环境,用cv2_imshow;否则用matplotlib) from google.colab.patches import cv2_imshow cv2_imshow(img) # 手动清理临时文件(可选,临时文件在会话结束后会自动删除) os.unlink(temp_file_path)
方法二:直接读取字节流(更高效)
如果不想生成临时文件,可以直接把GCS图片的字节内容读取到内存,再转换成OpenCV能识别的格式,这个方法更适合批量处理图片的场景:
from google.cloud import storage import cv2 import numpy as np # 初始化客户端 storage_client = storage.Client() bucket_name = "your-gcs-bucket" image_blob_path = "images/sample.jpg" # 获取图片blob并读取字节内容 bucket = storage_client.get_bucket(bucket_name) image_blob = bucket.blob(image_blob_path) image_byte_data = image_blob.download_as_bytes() # 将字节数据转换成numpy数组,再用OpenCV解码 image_np = np.frombuffer(image_byte_data, dtype=np.uint8) img = cv2.imdecode(image_np, cv2.IMREAD_COLOR) # 显示图片(如果不用cv2_imshow,也可以用matplotlib) import matplotlib.pyplot as plt plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) # OpenCV默认是BGR格式,要转成RGB适配matplotlib plt.axis("off") plt.show()
注意事项
- 权限问题:确保Datalab使用的服务账号拥有GCS存储桶的
storage.objects.get权限,否则会出现访问被拒绝的错误。 - 图片格式:如果你的图片是PNG、JPEG以外的格式,记得调整
cv2.imdecode的参数,比如cv2.IMREAD_UNCHANGED来保留透明通道。
内容的提问来源于stack exchange,提问作者user1058210
相关产品推荐
相关产品推荐

