初识 OpenCV: 图像处理入门

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了大量的图像处理和计算机视觉算法。OpenCV 支持多种编程语言,包括 Python、C++ 等。在本篇博文中,我们将通过一些简单的示例来探索 OpenCV 中的基本功能,包括提取 RGB 颜色通道、图像间的数学运算以及边界填充等操作。

开始前的准备

首先准备一张图片,在这里我准备的是一张美女和一个动漫人物

img.png zl.png

提取 RGB 颜色通道

在 OpenCV 中,图像通常是作为三维数组存储的,其中每个像素点由三个通道组成:红(Red)、绿(Green)和蓝(Blue)。我们可以轻松地从图像中提取出这些颜色通道。

python 复制代码
import cv2

# 读取图像
image = cv2.imread('img.png')

# 提取颜色通道
blue_channel = image[:, :, 0]  # 蓝色通道
green_channel = image[:, :, 1]  # 绿色通道
red_channel = image[:, :, 2]  # 红色通道

# 或者使用 cv2.split() 分离颜色通道
b, g, r = cv2.split(image)

# 显示蓝色通道
cv2.imshow('Blue Channel', blue_channel)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:

图像间的数学运算

OpenCV 提供了多种方式来进行图像间的数学运算,例如简单的加法和加权运算。

python 复制代码
# 读取两个图像
image_a = cv2.imread('img.png')
image_b = cv2.imread('zl.png')

# 调整尺寸
image_a = cv2.resize(image_a, (400, 400))
image_b = cv2.resize(image_b, (400, 400))

# 直接加法
combined_image = cv2.add(image_a, image_b)
cv2.imshow('Combined Image (Direct Add)', combined_image)
cv2.waitKey(0)

# 加权运算
weighted_image = cv2.addWeighted(image_a, 0.2, image_b, 0.8, 10)
cv2.imshow('Combined Image (Weighted Add)', weighted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:
边界填充

有时我们需要为图像添加边界,以适应不同的应用场景,例如图像融合或调整图像尺寸。OpenCV 提供了 copyMakeBorder 函数来实现这一目的。

python 复制代码
import cv2

# 读取图像
image = cv2.imread('img.png')

# 设置边界宽度
top, bottom, left, right = 50, 50, 50, 50

# 常数填充
constant_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])
cv2.imshow('Constant Border', constant_border)
cv2.waitKey(0)

# 镜像填充
reflect_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REFLECT)
cv2.imshow('Reflect Border', reflect_border)
cv2.waitKey(0)

# 镜像填充 101
reflect101_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REFLECT_101)
cv2.imshow('Reflect101 Border', reflect101_border)
cv2.waitKey(0)

# 复制边缘
replicate_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REPLICATE)
cv2.imshow('Replicate Border', replicate_border)
cv2.waitKey(0)

# 循环填充
wrap_border = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_WRAP)
cv2.imshow('Wrap Border', wrap_border)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果 :

结论

通过上述示例,我们了解了 OpenCV 在图像处理方面的一些基本功能。从提取颜色通道到进行图像间的数学运算,再到为图像添加边界,这些操作都非常直观且易于实现。OpenCV 是一个非常强大的工具,适合用于各种图像处理和计算机视觉任务。随着对 OpenCV 更深入的学习,你可以尝试更多高级的功能和技术。

相关推荐
超龄超能程序猿7 小时前
Spring AI Alibaba 与 Ollama对话历史的持久化
java·人工智能·spring
孤狼灬笑8 小时前
机器学习四范式(有监督、无监督、强化学习、半监督学习)
人工智能·强化学习·无监督学习·半监督学习·有监督学习
第七序章8 小时前
【C++】AVL树的平衡机制与实现详解(附思维导图)
c语言·c++·人工智能·机器学习
晨非辰8 小时前
【面试高频数据结构(四)】--《从单链到双链的进阶,读懂“双向奔赴”的算法之美与效率权衡》
java·数据结构·c++·人工智能·算法·机器学习·面试
阿里云大数据AI技术8 小时前
云栖实录 | 通义实验室基于MaxCompute进行大模型数据管理及处理
大数据·人工智能
玉树临风江流儿8 小时前
关于pkg-config的使用示例--g++编译过程引入第三方库(如Opencv、Qt)
人工智能·opencv
struggle20258 小时前
AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
css·人工智能·typescript·go·shell·powershell
后端小肥肠8 小时前
公众号对标账号文章总错过?用 WeWe-RSS+ n8n,对标文章定时到你的邮箱(下篇教程)
人工智能·agent
Gloria_niki8 小时前
目标检测学习总结
人工智能·计算机视觉·目标跟踪