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

相关推荐
智写-AI30 分钟前
真实有效的免费降英文AI工具服务商
人工智能·python
大鹏的NLP博客31 分钟前
深度学习模型部署一致性验证规范
人工智能·深度学习
土星云SaturnCloud36 分钟前
边缘计算驱动绿氢生产过程智能寻优:电解槽级实时优化技术解析
服务器·人工智能·ai·边缘计算
Urbano1 小时前
校服精细化缝制难点、全流程自动化改造方案与核心贴袋设备选型实操科普
人工智能
IT_陈寒1 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
零零信安1 小时前
AI智能体,攻守失衡的催化剂 | 零零信安
人工智能·网络安全·数据泄露·暗网·零零信安
IvorySQL1 小时前
PG 日报|社区讨论重构 pg_hba 配置文件格式
数据库·人工智能·postgresql·重构·ivorysql
白色机械键盘2 小时前
基于多智能体协作的预测性运维误报分级治理架构研究
人工智能
Web极客码2 小时前
突破并发瓶颈:云端高性能架构如何赋能海外 AI Agent 矩阵的高效产出
服务器·人工智能·架构
甲维斯2 小时前
P图自由!把字节SeeDream5pro接入Jimage!
人工智能