我正在尝试使用 openCV 读取 16 位灰度 PNG。该图像存储在网络共享上。当我尝试使用
cv.imread()
加载图像时,没有返回任何内容:
import cv2 as cv
print(type(data_height[0]))
print(data_height[0].exists())
img = cv.imread(data_height[0].as_posix(), cv.IMREAD_ANYDEPTH)
print(type(img))
>>> <class 'pathlib.WindowsPath'>
>>> True
>>> <class 'NoneType'>
如您所见,该文件确实存在。它甚至可以用 PIL 加载:
from PIL import Image
img = Image.open(data_height[0])
print(img)
>>> <PIL.PngImagePlugin.PngImageFile image mode=I;16 size=2560x300 at 0x27F77E95940>
只有当我将图像复制到我正在使用的 .ipynb 目录中时,openCV 才能加载图像:
import shutil
shutil.copy(data_height[0], "./test_img.png")
img = cv.imread("./test_img.png", cv.IMREAD_ANYDEPTH)
print(type(img))
>>> <class 'numpy.ndarray'>
为什么openCV拒绝加载图像?
您可以尝试将 WindowsPath 转换为字符串:
img = cv.imread(str(data_height[0]),cv.IMREAD_ANYDEPTH)
您也可以尝试手动解码此图像:
import numpy as np
import cv2 as cv
with open(data_height[0],'rb') as f:
img_bytes = f.read()
img_array = np.frombuffer(img_bytes,dtype=np.uint8)
img = cv.imdecode(img_array, cv.IMREAD_ANYDEPTH)