opencv - 如何将图像文件堆叠到一个文件中以及如何调整黑白图像的大小
问题描述
在这里我的图像看起来像这样输入图像描述在这里 我试图将图像文件堆叠到一个文件中,并调整黑白图像的大小 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
解决方案
在您的代码中,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))
注意:您可能希望标准化(平均)堆叠图像的值。
推荐阅读
- bash - 带有 comm 命令的行号。可能吗?
- spring-mvc - Getmapping 如何使用 spring MVC (thymleaf) 从 Form 中获取价值?
- spring-batch - Job of Jobs - 将作业作为子作业运行,也可以独立运行
- tensorflow - 带有 RTX 3080 的 CUDA 11 是否支持 tensorflow 和 keras?
- python-3.x - 从复制的一维数组构建一个 4D 矩阵
- php - 如何在laravel中将刀片文件转换为pdf和图像
- python - 使用opencv实时检测单个形状和颜色
- python - BeagleBone BLUE:如何在启动时启动磁力计
- python - 使用 psycopg2 在 Django 中保护原始 SQL 查询
- ios - 当源代码被组织到嵌套组文件夹中时,podspec 中的 source_files