📜  OpenCV 简介

📅  最后修改于: 2022-05-13 01:54:33.213000             🧑  作者: Mango

OpenCV 简介

OpenCV 是最流行的计算机视觉库之一。如果您想在计算机视觉领域开始您的旅程,那么对 OpenCV 概念的透彻理解至关重要。
在本文中,我将尝试以直观的方式介绍 OpenCV 最基本和最重要的概念。
本文将涵盖以下主题:

  1. 读取图像
  2. 提取像素的 RGB 值
  3. 提取感兴趣区域 (ROI)
  4. 调整图像大小
  5. 旋转图像
  6. 绘制一个矩形
  7. 显示文本

这是我们将在本文的整个过程中处理的原始图像。

原始图像

让我们从使用 OpenCV 读取图像的简单任务开始。

读取图像

# Importing the OpenCV library
import cv2
# Reading the image using imread() function
image = cv2.imread('image.png')
  
# Extracting the height and width of an image
h, w = image.shape[:2]
# Displaying the height and width
print("Height = {},  Width = {}".format(h, w))

现在我们将专注于提取单个像素的 RGB 值。
注意 – OpenCV 按 BGR 顺序排列通道。所以第 0 个值将对应于蓝色像素而不是红色。

提取像素的 RGB 值

# Extracting RGB values. 
# Here we have randomly chosen a pixel
# by passing in 100, 100 for height and width.
(B, G, R) = image[100, 100]
  
# Displaying the pixel values
print("R = {}, G = {}, B = {}".format(R, G, B))
  
# We can also pass the channel to extract 
# the value for a specific channel
B = image[100, 100, 0]
print("B = {}".format(B))

提取感兴趣区域 (ROI)

# We will calculate the region of interest 
# by slicing the pixels of the image
roi = image[100 : 500, 200 : 700]

感兴趣的区域

调整图像大小

# resize() function takes 2 parameters, 
# the image and the dimensions
resize = cv2.resize(image, (800, 800))

调整大小的图像

这种方法的问题是不能保持图像的纵横比。所以我们需要做一些额外的工作来保持适当的纵横比。

# Calculating the ratio
ratio = 800 / w
  
# Creating a tuple containing width and height
dim = (800, int(h * ratio))
  
# Resizing the image
resize_aspect = cv2.resize(image, dim)

以适当的纵横比调整大小

旋转图像

# Calculating the center of the image
center = (w // 2, h // 2)
  
# Generating a rotation matrix
matrix = cv2.getRotationMatrix2D(center, -45, 1.0) 
  
# Performing the affine transformation
rotated = cv2.warpAffine(image, matrix, (w, h))

旋转图像

旋转图像涉及很多步骤。因此,让我详细解释它们中的每一个。

这里使用的两个主要功能是 -

  • getRotationMatrix2D()
  • 变形仿射()

getRotationMatrix2D()
它需要 3 个参数——

  • center –图像的中心坐标
  • 角度 -图像应旋转的角度(以度为单位)
  • Scale –比例因子


    它返回一个 2*3 矩阵,由从 alpha 和 beta 派生的值组成
    alpha = 比例 * cos(角度)
    beta = 比例 * 正弦(角度)

    旋转矩阵

    变形仿射()

    函数warpAffine 使用旋转矩阵变换源图像:

    dst(x, y) = src(M11X + M12Y + M13, M21X + M22Y + M23)
    

    这里 M 是旋转矩阵,如上所述。
    它计算图像的新 x、y 坐标并对其进行转换。

    绘制一个矩形
    这是一个就地操作。

    # We are copying the original image, 
    # as it is an in-place operation.
    output = image.copy()
      
    # Using the rectangle() function to create a rectangle.
    rectangle = cv2.rectangle(output, (1500, 900), 
                              (600, 400), (255, 0, 0), 2)
    

    长方形

    它接受 5 个参数——

    • 图片
    • 左上角坐标
    • 右下角坐标
    • 颜色(BGR 格式)
    • 行宽


    显示文本
    也是就地操作

    # Copying the original image
    output = image.copy()
      
    # Adding the text using putText() function
    text = cv2.putText(output, 'OpenCV Demo', (500, 550), 
                       cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 0, 0), 2)
    

    文本

    它接受 7 个参数——

    1. 图片
    2. 要显示的文本
    3. 左下角坐标,文本应该从哪里开始
    4. 字体
    5. 字体大小
    6. 颜色(BGR 格式)
    7. 行宽