使用 Python 在 OpenCV 中处理图像

OpenCV 是任何计算机视觉或图像处理任务中最常用的库之一。在为图像处理应用不同的过滤器或执行任何与图像相关的任务之前,您必须知道如何读取图像、显示图像或写入图像。

OpenCV带有内置函数来执行这些基本操作。让我们看看如何在任务中使用这些函数。

在执行任何操作之前,请确保您的系统中有OpenCV,Numpy和Matplotlib(可选)。OpenCV在后端使用Numpy,并且需要Matplotlib来显示图像。

这是将在此处使用的原始图像:

读取图像

OpenCV有一个内置函数,可以读取/加载/打开图像,即。让我们看看语法:cv2.imread()

import cv2
cv2.imread(Pathname, Flag)

它由两个参数组成:

  • 路径:它包含要读取的图像的路径名。确保图像应位于同一目录中,或者应指定图像的完整路径名,否则将得到一个空矩阵。

  • 旗:这是一个可选参数。它以您希望阅读的方式设置图像的格式。有三种类型的标志:

CV2.IMREAD_COLOR或 1
这将通过从图像中删除任何透明度来以彩色模式读取图像。OpenCV 以 BGR 8 位格式加载彩色图像。默认情况下使用此标志。

CV2.IMREAD_GRAYSCALE或 0
这将以灰度模式读取图像。

CV2.IMREAD_UNCHANGED 或 -1
这将按原样读取图像,包括 alpha 通道(如果存在)。

让我们看看如何使用三种不同的标志来读取图像:

img_colored = cv2.imread('dog.jpg', 1)
img_grayscale = cv2.imread('dog.jpg', 0)
img_unchanged = cv2.imread('dog.jpg', -1)

加载的图像对象将是一个 numpy ndarray。您可以使用 获取其尺寸。请注意,因为它首先返回高度,然后返回宽度,对于非灰度图像,它还返回颜色通道的数量:.shape

img_colored = cv2.imread('dog.jpg', 1)
height, width, num_channels = img.shape
print(type(img_colored))
print(height, width, num_channels)
# <class 'numpy.ndarray'>
# 404 606 3


img_grayscale = cv2.imread('dog.jpg', 0)
# only height and width for grayscale
height, width = img.shape

显示图像

OpenCV有一个内置函数,可以在窗口中显示图像,该窗口是。让我们看看语法:cv2.imshow()

cv2.imshow(WindowName, Image)

它由两个参数组成:

  • 窗口名称:它指定包含图像的窗口的名称。这将帮助您一次显示多个图像,您可以为每个图像指定不同的窗口名称。
  • 图像:这是将显示的图像。

还有其他函数与此函数一起使用。

  • cv2.waitKey():它将在屏幕上显示以毫秒为单位的时间段的窗口。该值应为正整数。如果值为 0,它将无限期地按住窗口,直到您按下某个键。
  • cv2.destroyAllWindows():它将从屏幕和创建的内存中销毁所有打开的窗口。
  • cv2.destroyWindow():它将破坏特定的窗口。参数将是要销毁的窗口名称。

让我们看看的外观:

img_colored = cv2.imread('dog.jpg', 1)
cv2.imshow('Grayscale Image', img_colored)

img_colored = cv2.imread('dog.jpg', 1)
img_grayscale = cv2.imread('dog.jpg', 0)
cv2.imshow('Grayscale Image', img_grayscale)

编写映像

OpenCV有一个内置函数,可以将图像写入/保存到给定的路径,即。它会将您的图像保存在工作目录中。让我们看看语法:cv2.imwrite()

cv2.imshow(FileName, Image)

它由两个参数组成:

  • 文件名:它包含文件的名称,该文件应该是.jpg,.png等格式。
  • 图像:它是将保存的图像的名称。

总而言之,您将看到一个示例,该示例将以灰度加载图像,显示它,然后保存它。

import cv2

# Reading an image
img_gray = cv2.imread('dog.jpg', 0)

# Display an image in a window
cv2.imshow('Grayscale Image', img_gray)

# Wait for a keystroke 
cv2.waitKey(0)

# Destroy all the windows
cv2.destroyAllWindows()

# Write an image
cv2.imwrite('dog_grayscale.jpg', img_gray)

绘制和处理图像

您可以使用不同的函数在图像中绘制形状和文本:

  • cv2.line
  • cv2.rectangle
  • cv2.circle
  • cv2.ellipse
  • cv2.polylines
  • cv2.putText
import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('dog.jpg', 1)
height, width, channels = img.shape

# Draw a diagonal blue line with thickness of 5 px
img = cv2.line(img, (0, 0), (width-1,height-1), (255, 0, 0), 5)

# Rectangle: pt1, pt2, color, thickness
x1 = width // 2
img = cv2.rectangle(img, (x1, 0), (x1 + 150, 150), (0, 255, 0), 3)

# Circle: center, radius, color, thickness, -1=fill
img = cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)

# Ellipse
img = cv2.ellipse(img, (width // 2, height // 2), (100, 50), 0, 0, 180, (0, 0, 255), -1)

# Polygon
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32)
pts = pts.reshape((-1, 1, 2))
img = cv2.polylines(img,[pts], True, (0, 255, 255))

# Text 
font = cv2.FONT_ITALIC
cv2.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 3, cv2.LINE_AA)

cv2.imshow('image', img)

这是它的样子:

结语

本文将帮助您开始您的 OpenCV 之旅。您学习了如何读取图像、如何显示图像、如何将其保存在本地目录中以及如何在图像中绘制形状。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值