在本文中,我们将了解如何使用 Python 创建彩色图像。不仅如此,我们还将看到如何在该图像中进行更改,包括 CropSwapcollate 图像。

简单来说,图像只是一个 2D/3D 数组。如果是 grey 图像,那么它是一个 2D 数组,如果它是一个 color 图像,那么它是一个 3D 数组。

使用的概念: 数组

阵列切片

在 Python 数组中,有多种方法可以打印包含所有元素的整个数组,但要从数组中打印特定范围的元素,我们使用 Slice 操作。

使用冒号(:) 对数组执行切片操作。

打印元素从开始到范围使用 [:Index],打印元素从最终使用 [:-Index],打印元素从特定索引到结束使用 [Index:],打印元素在一个范围内,使用 [Start Index:End Index] 并使用切片操作打印整个 List,使用 [:]。此外,要以相反的顺序打印整个数组,请使用 [::-1]。

[列表](https://res.cloudinary.com/practicaldev/image/fetch/s--xm9IYBMj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/l98g8twus5s5wez3grq5.PNG)

信用: GeeksForGeeks

阵列

Python 数组是常见类型的数据结构集合

数组与列表相同。它们之间的唯一区别是 list 仅用于 row-wise 操作,但 Arrays 也可以执行 row-wisecolumn-wise 操作。

当您必须动态处理数据时,数组特别有用。

Python 数组快于列表,因为它使用更少的内存

创建自己的图像

我们已经知道图像只是一个 2D/3D 数组。第一步是使用以下命令创建一组具有我们所需的维度/像素的数组。

import cv2 import numpy as np size= 600,600,3 zero=np.zeros(size, dtype=np.uint8)

在这里,我将创建尺寸为 600x600 像素的图像,并且数组的名称为零。

它的输出看起来像

[图像](https://res.cloudinary.com/practicaldev/image/fetch/s--nYYAwiei--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/9qandehxn8xql8rqcbjk.png)

下一步是给/分配该图像的颜色,因为它是纯黑色图像。

它是通过使用互联网上提供的数组概念颜色代码来完成的。您可以使用以下链接参考此颜色代码。

https://www.rapidtables.com/web/color/RGB_Color.html

您应该注意的一件事是,数组中的颜色代码BGR而不是RGB。

代码及其输出如下所示。

zero[0:200,0:200]=[255,153,51] zero[0:200,200:400]=[0,0,0] zero[0:200,400:600]=[0,255,255] zero[200:400,0:200]=[204,0,204] zero[200:400,200:400]=[0,255,128] zero[200:400,400:600]=[0,0,255] zero[400:600,0:200]=[0,102,204] zero[400:600,200:400]=[51,153,255] zero[400:600,400:600]=[0,153,0]

输出是

[1](https://res.cloudinary.com/practicaldev/image/fetch/s--iZIIkOX_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/999ey99ynv9ff8xe2m9b.PNG)

左侧图像是我们的生成图像,右侧图像是在 Paint 中开发的 master-piece

裁剪和交换图像

我们再次使用数组切片的概念来裁剪交换图像。您可以在下面的代码中参考这一点。

#cropping and replace(swap) the squares zero[100:200,100:200]=[0,153,0] zero[100:200,400:500]=[255,153,51] zero[200:400,100:200]=[0,255,255] zero[200:400,200:400]=[204,0,204] zero[200:400,400:500]=[0,255,128] zero[400:500,100:200]=[51,153,255] zero[400:500,200:400]=[0,102,204] zero[400:500,400:500]=[0,0,0] zero[100:200,200:400]=[0,255,255]

输出是

[3 replace2](https://res.cloudinary.com/practicaldev/image/fetch/s--jryxvIOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/702kcf5cyeo2hglvubkr.PNG)

是的,最后我们成功交换了盒子。

整理图片

您可能会在手机的图像编辑器中注意到此选项。是的,现在我们要在 Python 中使用 concatenate 函数 创建我们的自己的 Image Collager

连接有两种类型,即水平连接和垂直连接。

我们将创建另一个 3D 数组并将它们与现有的数组/图像水平连接。

代码如下所示。

#Creating another same array(image) for horizontal concatenating size= 600,600,3 Hconcate=np.zeros(size, dtype=np.uint8) Hconcate[0:200,0:200]=[255,153,51] Hconcate[0:200,200:400]=[0,0,0] Hconcate[0:200,400:600]=[0,255,255] Hconcate[200:400,0:200]=[204,0,204] Hconcate[200:400,200:400]=[0,255,128] Hconcate[200:400,400:600]=[0,0,255] Hconcate[400:600,0:200]=[0,102,204] Hconcate[400:600,200:400]=[51,153,255] Hconcate[400:600,400:600]=[0,153,0]

@048`#水平连接轴u003d1

垂直连接轴u003d0

水平_concateu003dnp.concatenate((零,Hconcate),axisu003d1)@049`

连接完成后,我们可以使用以下代码在 Python 中使用 cv2 库查看我们的输出。

帽u003dcv2.imshow(“照片”,水平_concate)

cv2.waitKey()

cv2.destroyAllWindows()

waitKey 用于保持操作,当我们按下回车键时,destroyAllWindows 将销毁进程并关闭进程。

Concatenation 的输出如下图所示。

[4 连接](https://res.cloudinary.com/practicaldev/image/fetch/s--sTUsG7k0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/j7estvt5kf93jd707y6o.PNG)

最后我们也完成了串联。

谢谢大家的阅读。请继续关注我即将发布的更有趣的文章。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐