使用 Python 创建、裁剪、交换和整理 BGR 图像
在本文中,我们将了解如何使用 Python 创建彩色图像。不仅如此,我们还将看到如何在该图像中进行更改,包括 Crop、Swap 和 collate 图像。
简单来说,图像只是一个 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-wise 和 column-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]
输出是
[](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]
输出是
[](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 的输出如下图所示。
[](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)
最后我们也完成了串联。
谢谢大家的阅读。请继续关注我即将发布的更有趣的文章。
更多推荐


所有评论(0)