OpenCV 创建图像

Ammar Ali 2024年2月15日
  1. 使用 OpenCV 中的NumPy库的zeros()函数创建图像
  2. 使用 OpenCV 的绘图函数创建图像
OpenCV 创建图像

图像处理中的一项任务是创建图像,可以从头开始创建图像,也可以加载现有图像并对其进行修改。本教程将讨论在 OpenCV 中创建图像的常见方法。

使用 OpenCV 中的NumPy库的zeros()函数创建图像

图像由放置在矩阵中的像素组成。每个像素包含一个颜色值,即 BGR 三元组。

BGR 三元组值包含三个范围为0 到 255之间的值,在一个 8 位图像中。第一个值对应蓝色的强度,第二和第三个 BRG 三元组值对应绿色和红色。

我们可以设置这三种颜色的值来制作任何颜色。

在 8 位图像中,一个像素可以有256乘以256乘以255种不同的颜色。我们可以使用NumPyzeros()函数创建一个黑色的图像。

zeros()函数创建一个给定行数和列数的矩阵,矩阵中只包含零。

示例代码 1:

import cv2
import numpy as np

# Define the dimensions of the image
height = 512
width = 512

# Create a black image with the specified dimensions
img = np.zeros((height, width, 3), np.uint8)

# Display the image
cv2.imshow("Binary", img)

# Wait until a key is pressed and then close the image window
cv2.waitKey(0)

输出:

使用 numpy 创建的黑色图像

上面的图像中每个像素的 BGR 三元组值都为(0,0,0),即黑色。我们也可以通过将每个像素值设置为 BGR 三元组值来改变图像的颜色。

现在,让我们将上述图像的颜色更改为蓝色。

示例代码 2:

import cv2
import numpy as np

# Define the dimensions of the image
height = 512
width = 512

# Create a black image with the specified dimensions
img = np.zeros((height, width, 3), np.uint8)

# Fill the entire image with a blue color
img[:, :] = (255, 0, 0)

# Display the image
cv2.imshow("image", img)

# Wait until a key is pressed and then close the image window
cv2.waitKey(0)

输出:

使用 numpy 创建的蓝色图像

上面的代码中的冒号(:)符号用于表示所有的行和列。第一个冒号对应列,第二个冒号对应img矩阵的行。

冒号还可以定义范围,例如0 到 100可以表示为0:100。我们可以在图像中设置某些像素的颜色,而不是设置所有像素的颜色。

例如,让我们为上述图像的不同部分设置不同的颜色。

示例代码 3:

import cv2
import numpy as np

# Define the dimensions of the image
height = 512
width = 512

# Create a black image with the specified dimensions
img = np.zeros((height, width, 3), np.uint8)

# Fill the entire image with blue color (BGR format)
img[:, :] = (255, 0, 0)

# Fill a region in the top-left corner with yellow color
img[0:100, 0:100] = (255, 255, 0)

# Fill the right half of the image with red color
img[:, width // 2 : width] = (0, 0, 255)

# Display the resulting image
cv2.imshow("image", img)

# Wait for a key press and close the image window
cv2.waitKey(0)

输出:

使用 numpy 创建的多颜色图像

在上述代码中,我们将第一个100列和第一个100行的颜色设置为青色,将图像的右侧颜色使用图像的宽度设置为红色。

使用 OpenCV 的绘图函数创建图像

OpenCV 提供了一系列绘图函数,允许您向图像中添加图形元素。使用以下函数,您可以创建具有形状、线条和文本的图像。

  • -cv2.line():在两个点之间绘制直线。

  • -cv2.rectangle():绘制一个具有指定尺寸的矩形。

  • -cv2.circle():绘制一个具有给定中心和半径的圆。

  • -cv2.ellipse():绘制一个具有指定参数的椭圆。

  • -cv2.polylines():绘制一个多边形或一系列连接的线段。

  • -cv2.putText():向图像添加文本。

示例代码:

import cv2
import numpy as np

# Create a blank image with a white background
width, height = 640, 480
blank_image = np.zeros((height, width, 3), dtype=np.uint8)
blank_image[:] = (255, 255, 255)  # White color in BGR format

# Draw a red rectangle
start_point_rect = (100, 100)
end_point_rect = (300, 300)
red_color = (0, 0, 255)  # Red color in BGR format
thickness_rect = 2
cv2.rectangle(blank_image, start_point_rect, end_point_rect, red_color, thickness_rect)

# Draw a green circle
center_circle = (400, 150)
radius_circle = 50
green_color = (0, 255, 0)  # Green color in BGR format
thickness_circle = -1  # Negative thickness fills the circle
cv2.circle(blank_image, center_circle, radius_circle, green_color, thickness_circle)

# Draw a blue line
start_point_line = (50, 400)
end_point_line = (600, 400)
blue_color = (255, 0, 0)  # Blue color in BGR format
thickness_line = 5
cv2.line(blank_image, start_point_line, end_point_line, blue_color, thickness_line)

# Add text to the image
text = "OpenCV Drawing"
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1
font_color = (0, 0, 0)  # Black color in BGR format
font_thickness = 2
text_position = (50, 50)
cv2.putText(
    blank_image, text, text_position, font, font_scale, font_color, font_thickness
)

# Display the image
cv2.imshow("Image with Drawing", blank_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

使用绘图函数在 OpenCV 中创建空白图像

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - OpenCV Image