首页 > 解决方案 > 如何将图像文件堆叠到一个文件中以及如何调整黑白图像的大小

问题描述

在这里我的图像看起来像这样输入图像描述在这里 我试图将图像文件堆叠到一个文件中,并调整黑白图像的大小 1000X1000。但我没有得到,我有大小为 600X400 的图像,但我需要它到 1000 像素大小,请帮助我怎么做。这里我的图片加载:

 import cv2
    import glob
    img= [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack1/*jpg')]
img2= [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack2/*jpg')]
img3= [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack3/*jpg')]
img4= [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack4/*jpg')]

在这里,我将所有图像放入一个列表中:

img=img1+img2+img3+img4

在这里我调整图像大小:

im_g=cv2.resize(img,(1000,1000))
--------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-69-56a6794f0ec5> in <module>()
----> 1 im_g=cv2.resize(img,(1000,1000))

TypeError: src is not a numpy array, neither a scalar

标签: opencvimage-processingdeep-learningcomputer-visioncv2

解决方案


在您的代码中,img1、img2、img3、img4 是列表。当您使用 + 运算符时,它们以列表方式堆叠。

例如,每个文件夹(stack1,stack2,...)中有N张大小为(h,w)的图像,img1的形状为(N,h,w)。但是img1+img2的形状是(2N,h,w)。请改用 numpy 数组。

import cv2
import glob
import numpy as np

img1 = np.array([cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack1/*jpg')])
img2 = np.array([cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack2/*jpg')])
img3 = np.array([cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack3/*jpg')])
img4 = np.array([cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack4/*jpg')])

imgs = list(img1+img2+img3+img4)

for img in imgs:
    im_g = cv2.resize(img,(1000,1000))

文件夹中有多少个文件(stack1、stack2、...)?在您使用 glob 的方式中,结果将是多个文件。您必须再添加一个在文件夹中堆叠文件的步骤。

如果想要的结果只有一个文件,试试这个。

import cv2
import glob
import numpy as np

img1 = [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack1/*jpg')]
img2 = [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack2/*jpg')]
img3 = [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack3/*jpg')]
img4 = [cv2.imread(file) for file in glob.glob('C:/Users/NanduCn/jupter1/deepl/challenges-master/ML/stack4/*jpg')]

imgs = (img1+img2+img3+img4)
stacked_img = np.array(img1[0])
for img in imgs[1:]:
    stacked_img += np.array(img)
im_g = cv2.resize(stacked_img,(1000,1000))

注意:您可能希望标准化(平均)堆叠图像的值。


推荐阅读