在 Python 中使用 OpenCV 进行图像处理
任务描述
· 使用 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()
while True:
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 张图像并将它们组合成一张图像。例如拼贴画。
输出:
水平拼贴
垂直拼贴
原文标题 : 在 Python 中使用 OpenCV 进行图像处理
最新活动更多
-
即日-12.26立即报名>>> 【在线会议】村田用于AR/VR设计开发解决方案
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
即日-1.14火热报名中>> OFweek2025中国智造CIO在线峰会
-
即日-1.24立即参与>>> 【限时免费】安森美:Treo 平台带来出色的精密模拟
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 【线下会议】OFweek 2024(第九届)物联网产业大会
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论