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

相关推荐
修复bug25 分钟前
trae.ai 编辑器:前端开发者的智能效率革命
人工智能·编辑器·aigc
掘金安东尼28 分钟前
为什么GPT-4o可以生成吉卜力风格照片,原理是什么?
人工智能
励志成为大佬的小杨1 小时前
pytorch模型的进阶训练和性能优化
人工智能·pytorch·python
知舟不叙1 小时前
OpenCV的基础操作
人工智能·opencv·计算机视觉
果冻人工智能1 小时前
打造 AI Agent 对于中产阶级来说就是场噩梦
人工智能
MediaTea1 小时前
AI 文生图:提示词撰写技巧与示例(ChatGPT-4o 篇)
人工智能
墨绿色的摆渡人2 小时前
用 pytorch 从零开始创建大语言模型(三):编码注意力机制
人工智能·pytorch·语言模型
zm-v-159304339862 小时前
ChatGPT 与 DeepSeek:学术科研的智能 “双引擎”
人工智能·chatgpt
果冻人工智能2 小时前
美国狂奔,中国稳走,AI赛道上的龟兔之争?
人工智能