openCV 无法从某些目录读取图像

问题描述 投票:0回答:1

我正在尝试使用 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拒绝加载图像?

python opencv python-imaging-library
1个回答
0
投票

您可以尝试将 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)
© www.soinside.com 2019 - 2024. All rights reserved.