Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

使用 Opencv,你不需要成为操作和处理图像的专家。图像处理是一个强大的工具;它有助于操纵、增强和提取图像中的细节。该技术用于从娱乐和游戏到取证的多个领域。例如,它可以用于识别嫌疑人、分析视觉证据、重建犯罪现场并支持调查过程。

Opencv是如何工作的?

每个图像都由像素矩阵组成。后者由称为 RGB 颜色的三种主要颜色表示,即红色、绿色和蓝色(我们可以从这三种颜色中精确地得出 256 * 256 * 256 = 16,777,216 种可能的颜色)。我们使用核矩阵对每个主颜色应用卷积运算。

什么是卷积矩阵滤波器?什么是核矩阵?

卷积操作是用另一个称为“核”的矩阵对一个矩阵进行处理。

卷积矩阵滤波器使用第一个矩阵,该矩阵是要处理的图像。图像是直角坐标系中像素的二维集合。使用的内核取决于你想要的效果。

让我们考虑一个具有 9 个像素的输入图像(保持简单,图像只有 9 个像素)。

为了获得最终的输出图像,我们将进行一些基本的数学计算。

Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

实际上非常简单。我们将内核矩阵放在输入图像矩阵上,并将每个正方形中的各个条目相乘,然后将结果相加。

在这种情况下,它是:

(1 × 0) + (2 × 0) + (1×0) + (0×0) + (0×1) + (0×2) + (-1)×0 + (-2)×4 + (-1)×5 = -8 + (-5) = -13

我们将取总和为-13,并将输出图像中的中心像素设置为该颜色,具体位置在第一行和第二列(1,1)。

我们对位置 (1,2) 上的第二个像素执行相同的操作,我们得到:

(1 × 0) + (2 × 0) + (1×0) + (0×1) + (0×2) + (0×3) + (-1)×4 + (-2)×5 + (-1)×6 = -4 + (-10) + (-6) = -20

在扫描映射每个新数字的图像后,我们将获得输出图像中所示的值。

图像处理

这里的 Python 代码将处理所有卷积计算的麻烦。

import cv2
import numpy as np

# Load the image
image = cv2.imread('image.png')

# Define the kernel matrix for blurring
kernel_blur= np.array([[1/9, 1/9, 1/9],
                              [1/9, 1/9, 1/9],
                              [1/9, 1/9, 1/9]])

# Apply the emboss filter
Blurry_Image = cv2.filter2D(image, -1, kernel_blur)

# Display the original and processed images
cv2.imshow("Original Image", image)
cv2.imshow("Blurry Image", Blurry_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

让我们拍一张第一次尝试滑翔伞的孩子的照片!

Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

一个孩子尝试滑翔伞的原始图像

执行代码后,内核模糊会产生模糊图像。

Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

让我们改变代码中的矩阵,以便我们可以检测图像中的边缘:

Edge_detection_Matrix= np.array([[-1, -1, -1],
                                 [-1, 8, -1],
                                 [-1, -1, -1]])

我们得到以下结果:

Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

尝试滑翔伞的孩子图像的边缘检测

现在,让我们使用浮雕矩阵做一些有趣的事情,它在图像上创建 3D 效果:

Emboss_Matrix = np.array([[0, -1, 0],
                         [-1, 5, -1],
                         [0, -1, 0]])
Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

孩子尝试滑翔伞的 3D 图像

你也可以尝试以下一些其他矩阵:

identity_scaled_matrix = np.array([[0.5, 0, 0],
                                   [0, 2, 0],
                                   [0, 0, 1]])

该缩放单位矩阵可用于调整图像的亮度或对比度。

sobel_x_matrix = np.array([[-1, 0, 1],
                           [-2, 0, 2],
                           [-1, 0, 1]])

sobel_y_matrix = np.array([[-1, -2, -1],
                          [0, 0, 0],
                          [1, 2, 1]])

Sobel 矩阵用于边缘检测。sobel_x_matrix检测垂直边缘,同时,sobel_y_matrix检测水平边缘。

视频处理

我们也可以操作视频,因为视频或 GIF 只不过是一组帧。

import cv2
import numpy as np

# Open the video file
video = cv2.VideoCapture('video.mp4')

# Get the video's frame width and height
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))

# Create a video writer object
output_file = 'output.mp4'
video_writer = cv2.VideoWriter(output_file, cv2.VideoWriter_fourcc(*'mp4v'), 30, (width, height))

# Loop through each frame of the video
while True:
    # Read the current frame
    ret, frame = video.read()

    # If the frame was not successfully read, end the loop
    if not ret:
        break
    Edge_detection_Matrix = np.array([[-1, -1, -1],
                                      [-1, 8, -1],
                                      [-1, -1, -1]])
    # Apply the filter to the current frame
    result = cv2.filter2D(frame, -1, Emboss_Matrix)

    # Write the frame to the video file
    video_writer.write(result)

    # Show the current frame
    cv2.imshow("Result", result)

    # Wait for key press
    if cv2.waitKey(1) == ord('q'):
        break

# Release the video reader and writer, and close all windows
video.release()
video_writer.release()
cv2.destroyAllWindows()

# Save the result video to a specific file path
output_path = 'path/to/save/output.mp4'
cv2.imwrite(output_path, result)

我们以下面的 GIF 为例:

Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

2D 动画

通过应用边缘检测操纵矩阵,我们得到:

Opencv是干什么的?让你在几秒钟内掌握图像和视频处理

检测到 2D 动画的边缘

结论

我们已经了解了如何使用 OpenCV 应用各种滤镜和变换,例如模糊、锐化和浮雕,这使我们能够修改图像的外观以实现所需的视觉效果。开发人员和研究人员可以高效地处理图像读取、显示、过滤、转换和分析等图像操作。

作者:磐怼怼
来源:深度学习与计算机视觉
原文:https://mp.weixin.qq.com/s/2DdSvDAg5roSF_n3-K15ww

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论