任务描述

  • 使用 Python 代码自己创建图像。
  • 拍摄 2 张图像,裁剪两张图像的一部分并交换它们。
  • 拍摄 2 张图像并将它们组合成一张图像。例如拼贴画。
首先,我们将探索有关 Python 中图像处理和 OpenCV 库的各种细节。

什么是图像处理?

图像是计算机世界中的多维数组。黑白图像的 2D 数组和 RGB 的 3D 数组。
彩色图像在计算机中以三维 (3D) 数组的形式存储,其中仅存储 0-255 个值,此外 0 和 255 分别代表黑色和白色。
图像处理通过数字计算机处理数字图像。图像处理专注于开发能够对图像进行处理的计算机系统。该系统的输入是数字图像,系统使用有效算法处理该图像,并提供图像作为输出。
像素是图像的最小单位。从技术上讲,它是数组中行和列特定位置的一个条目。每个像素由三种颜色组成,即红色、绿色和蓝色。在组合这些不同的颜色时形成。多个像素一起形成一个完整的图像。
视频处理是指逐帧对视频进行操作。帧只是视频的特定实例,即单个时间点的图像。即使在一秒钟内,我们也可能有多个帧。视频是连续不断的图像流。
Python 提供了许多用于图像处理的库,包括:
  • OpenCV - 图像处理库主要专注于实时计算机视觉,广泛应用于 2D 和 3D 特征工具包、面部和手势识别、人机交互、移动机器人、对象识别等领域。
  • **Numpy 和 Scipy 库 **- 用于图像操作和处理。
  • Sckikit - 为图像处理提供大量算法。
  • Python Imaging Library (PIL) - 对图像执行基本操作,如创建缩略图、调整大小、旋转、在不同文件格式之间转换等。

在这里,我们将使用 OpenCV 模块。

  • OpenCV 是最流行的计算机视觉库之一。如果你想在计算机视觉领域开始你的旅程,那么对 OpenCV 概念的透彻理解至关重要。
  • OpenCV是一个用于计算机视觉、机器学习和图像处理的大型开源库。OpenCV 支持多种编程语言,如 Python、C++、Java 等。它可以处理图像和视频以识别物体、面部,甚至是人类的笔迹。
    当它与各种库集成时,例如Numpy,一个高度优化的数值运算库,那么在 Numpy 中可以进行的任何操作都可以与 OpenCV 结合使用。
  • 一般颜色代码是 RGB,但在 OpenCV 中使用的颜色代码格式是 BGR(蓝绿红)。

安装 OpenCV

要在你的系统上安装 OpenCV,请运行以下 pip 命令:
pip install opencv-python

旋转图像

首先,导入 cv2 模块。
import
 cv2

现在要读取图像,使用 cv2 模块的 imread() 方法,在参数中指定图像的路径并将图像存储在变量中,如下所示:
img = cv2.imread(
"pyimg.jpg"
)

该图像现在被视为一个矩阵,其中行和列值存储在 img 中。
实际上,如果你检查 img 的类型,它会给你以下结果:
>>>print(type(img))<class
 '
numpy
.
ndarray
'>

这是一个 NumPy 数组!这就是为什么使用 OpenCV 进行图像处理如此简单的原因。你一直在使用 NumPy 数组。
要显示图像,可以使用 cv2 的 imshow() 方法。
cv2.imshow(
'Original Image'
, img) cv2.waitKey(
0
)

waitkey() 函数将时间作为参数(以毫秒为单位)作为窗口关闭的延迟。在这里,我们将时间设置为零以永久显示窗口,直到我们手动关闭它。
要旋转此图像,你需要图像的宽度和高度,因为稍后将在旋转过程中使用它们。
height, width = img.shape[
0
:
2
]

shape 属性返回图像矩阵的高度和宽度。如果你打印
img.shape[
0
:
2
]

好的,现在我们有了图像矩阵,我们想要得到旋转矩阵。为了得到旋转矩阵,我们使用 cv2 的*getRotationMatrix2D()方法。getRotationMatrix2D()*的语法是:
cv2.getRotationMatrix2D(center, angle, scale)

这里的中心是旋转的中心点,角度是以度为单位的角度,比例是使图像适合屏幕的比例属性。
要获得我们图像的旋转矩阵,代码是:
rotationMatrix = cv2.getRotationMatrix2D((width/
2
, height/
2
), 
90
.5
)

下一步是在旋转矩阵的帮助下旋转我们的图像。
为了旋转图像,我们有一个名为wrapAffine的 cv2 方法,它以原始图像、图像的旋转矩阵以及图像的宽度和高度作为参数。
rotatedImage = cv2.warpAffine(img, rotationMatrix, (width, height))

旋转后的图像存储在 rotateImage 矩阵中。要显示图像,请使用 imshow(),如下所示:
cv2.imshow(
'Rotated Image'
, rotatedImage)cv2.waitKey(
0
)

使用网络摄像头捕获图像:

import
 cv2 cap = cv2.VideoCapture(
0

# here, 0 — to access internal webcam & 1 to access external webcam ret , 
photo = cap.read() 


# clicks the photoret 
cv2.imwrite(“my”,photo) 


# stores in a file
cap.release() 

cv2.imshow(“my”, photo) 


# displays the photo
cv2.waitKey() 

# used to set the expiry time for the picture to be displayed
cv2.destroyAllWindows() 

#used to destroy or close the picture window without crashing it
使用网络摄像头的视频流:
import
 cv2

cap = cv2.VideoCapture(
0
)

ret, photo = cap.read()

whileTrue
:

 ret, photo = cap.read()

 cv2.imshow(
'hi'
, photo)

if
 cv2.waitKey(
10
) ==
13
:

break
cv.destroyAllwindows()

将图像转换为灰度(黑白)

转换灰度图像的简单方法是像这样加载它:
img = cv2.imread(
"pyimg.jpg"
0
)

还有另一种使用 BGR2GRAY 的方法。
要将彩色图像转换为灰度图像,请使用 cv2 模块的 BGR2GRAY 属性。这在下面的示例中得到了证明:
导入 cv2 模块:
import
 cv2

阅读图片:
img = cv2.imread(
"pyimg.jpg"
)

使用 cv2 模块的 cvtColor() 方法,该方法将原始图像和 COLOR_BGR2GRAY 属性作为参数。将生成的图像存储在变量中:
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

显示原始图像和灰度图像:
cv2.imshow(
"Original Image"
, img)cv2.imshow(
"Gray Scale Image"
, gray_img)cv2.waitKey(
0
)

调整图像大小

要调整图像大小,可以使用 openCV 的 resize() 方法。在 resize 方法中,你可以指定 x 和 y 轴的值,也可以指定表示图像大小的行数和列数。
导入并读取图像:
import
 cv2img = cv2.imread(
"pyimg.jpg"
)

现在使用带有轴值的调整大小方法:
newImg = cv2.resize(img, (
0
,
0
), fx=
0.75
, fy=
0.75
)cv2.imshow(
'Resized Image'
, newImg)cv2.waitKey(
0
)

现在使用行和列值来调整图像大小:
newImg = cv2.resize(img, (
550
350
))cv2.imshow(
'Resized Image'
, newImg)cv2.waitKey(
0
)

我们说我们想要 550 列(宽度)和 350 行(高度)。

使用 Python 代码创建图像

输出如下:
拍摄 2 张图像,裁剪两张图像的一部分并交换它们。
结果:
拍摄 2 张图像并将它们组合成一张图像。例如拼贴画。
输出:
水平拼贴
垂直拼贴
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文
扫描二维码添加小编↓
继续阅读
阅读原文