初识 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 更深入的学习,你可以尝试更多高级的功能和技术。

相关推荐
Elastic 中国社区官方博客15 分钟前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
AWS官方合作商41 分钟前
Amazon Lex:AI对话引擎重构企业服务新范式
人工智能·ai·机器人·aws
workflower1 小时前
Prompt Engineering的重要性
大数据·人工智能·设计模式·prompt·软件工程·需求分析·ai编程
curemoon1 小时前
理解都远正态分布中指数项的精度矩阵(协方差逆矩阵)
人工智能·算法·矩阵
胡桃不是夹子2 小时前
CPU安装pytorch(别点进来)
人工智能·pytorch·python
Fansv5872 小时前
深度学习-6.用于计算机视觉的深度学习
人工智能·深度学习·计算机视觉
xjxijd2 小时前
AI 为金融领域带来了什么突破?
人工智能·其他
SKYDROID云卓小助手2 小时前
无人设备遥控器之如何分享数传篇
网络·人工智能·算法·计算机视觉·电脑
deephub3 小时前
LLM高效推理:KV缓存与分页注意力机制深度解析
人工智能·深度学习·语言模型
old_power3 小时前
Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0
linux·opencv