【发布时间】:2022-03-01 14:50:53
【问题描述】:
我有一个我正在尝试解决的问题。我有一个file.npy,其中包含很多图片。
每个图像都是该矩阵文件中的numpy array。所以我想做的是在该矩阵内的每个numpy array 图像上应用一些cv2 函数。 但我做不到。问题是 cv2 只接受 文件路径
我可以下载图像,然后在其上应用cv2 函数,但此方法不适用并且会产生不良性能。
如何将numpy array 图像输入cv2?
这是我的代码的一个简单部分
img=cv2.imread('/content/download.png')
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#thresholding to remove background
thr = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)[1]
这个方法我试过了,但是报错了
arr = np.asarray(bytearray(some_pic_image), dtype=np.uint8)
img = cv2.imdecode(arr, -1) # 'Load it as it is'
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
但产生了错误?
我该怎么做?
【问题讨论】:
-
这些图片是否带有.npy 扩展名?因为如果它们是你需要的 numpy 加载,它也需要一个路径。你有一个包含很多图像的文件,但是这个文件的扩展名是什么?文件还是文件夹?文件也有路径..
-
不抱歉,我的意思是文件 file.npy 扩展名不是文件路径。我修改了问题描述
-
您要发布您遇到的错误吗?这样更容易调试
-
如果你有一个 npy 文件,这个文件有一个路径,因为它保存在某个地方,你需要 numpy 加载。如果它是脚本中已经生成的数组,那么 opencv 已经可以处理它。您可能必须将数据类型更改为无符号的 8 位整数,因为 opencv 适用于该数据类型。但无论如何它直接在 numpy 数组上工作,所以不需要 imread
-
请展示一些创建代表
.npy文件的代码,以便我们知道我们正在处理什么,例如green = np.full((8,8,3),[0,255,0], dtype=np.uint8)和red = np.full((8,8,3),[255,255,255], dtype=np.uint8)然后np.save(???)
标签: python numpy image-processing cv2