当前位置: 首页 > news >正文

OpenCV图像处理入门实战指南

本文将通过一系列代码实例,帮你快速掌握OpenCV的核心功能。


一、环境准备

import cv2
import numpy as np
  • cv2:OpenCV核心库
  • numpy:用于处理图像矩阵运算

二、图像基础操作

1. 图像读取与显示

# 读取彩色图像(默认BGR格式)
img = cv2.imread('aigc.png')# 创建窗口并调整大小
cv2.namedWindow('Image Display', cv2.WINDOW_NORMAL)
cv2.resizeWindow('Image Display', 800, 400)# 显示图像
cv2.imshow('Image Display', img)# 等待按键触发(2000ms后自动关闭)
cv2.waitKey(2000)
cv2.destroyAllWindows()

2. 图像属性获取

print("图像尺寸:", img.shape)   # (height, width, channels)
print("数据类型:", img.dtype)   # uint8(0-255)
print("像素总数:", img.size)    # height*width*channels

三、进阶图像处理

1. 灰度转换

gray_img = cv2.imread('aigc.png', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('aigc_gray.jpg', gray_img)  # 直接保存灰度图

2. 区域裁剪

# 定义感兴趣区域(ROI)
cropped = img[30:230, 100:300]# 可视化对比
cv2.imshow('Original', img)
cv2.imshow('Cropped', cropped)
cv2.waitKey(0)

3. 视频处理实战

cap = cv2.VideoCapture('video1.mp4')while cap.isOpened():ret, frame = cap.read()if not ret:break# 实时灰度转换gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('Video Player', gray_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

四、高级操作技巧

1. 通道操作

b, g, r = cv2.split(img)  # 分离通道
merged = cv2.merge([b, g, r])  # 合并通道# 单独显示蓝色通道
cv2.imshow('Blue Channel', b)
cv2.waitKey(0)

2. 图像打码处理

# 在指定区域生成随机噪声
h, w, _ = img.shape
mask = np.random.randint(0, 256, (100, 100, 3), dtype=np.uint8)
img[200:300, 200:300] = maskcv2.imshow('Redacted Image', img)
cv2.waitKey(0)

3. 尺寸调整

resized = cv2.resize(img, None, fx=0.5, fy=0.5)  # 等比例缩放
# 或指定具体尺寸:
# resized = cv2.resize(img, (800, 600))

五、完整代码示例

import cv2
import numpy as npdef main():# 图像处理流程img = cv2.imread('aigc.png')# 显示原图cv2.imshow('Original', img)# 转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow('Grayscale', gray)# ROI裁剪roi = img[100:300, 200:400]cv2.imshow('ROI', roi)# 图像打码img[50:150, 50:150] = np.random.randint(0, 256, (100, 100, 3))cv2.imshow('Redacted', img)# 尺寸调整resized = cv2.resize(img, (640, 480))cv2.imshow('Resized', resized)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == "__main__":main()

六、关键知识点总结

功能模块核心函数参数说明
图像读取cv2.imread()第二个参数控制色彩模式
图像显示cv2.imshow()需配合cv2.waitKey()使用
图像保存cv2.imwrite()支持多种格式(jpg/png等)
键盘事件cv2.waitKey()返回按键ASCII码
资源释放cv2.destroyAllWindows()关闭所有窗口

http://www.lryc.cn/news/612875.html

相关文章:

  • 为什么需要日志收集系统
  • 【运维】自动化生产环境部署工作流
  • Mac/Windows跨平台PDF与AI高效解决方案
  • day 48 模型的可视化与推理
  • 连续最高天数的销售额(动态规划)
  • 3D 软件在游戏开发中的全链路应用:从原型到上线的实战解析
  • 音乐创作好助手—— 蘑兔音乐
  • 【自动驾驶】《Sparse4Dv3》代码学习笔记
  • uniapp/uniappx实现图片或视频文件选择时同步告知权限申请目的解决华为等应用市场上架审核问题
  • 行业应用案例:MCP在不同垂直领域的落地实践
  • 学深度学习,有什么好的建议或推荐的书籍?
  • 深入解析Java类加载机制:双亲委派模型的设计与实现
  • 开源大模型实战:GPT-OSS本地部署与全面测评
  • Android 之 Jetpack - Lifecycle
  • 告别复杂配置!cpolar让Prometheus监控突破网络限制
  • 【PHP 接口(Interface)完全入门指南】
  • 力控汽车零部件冲压MES系统方案
  • 汽车线束设计—导线的选取
  • 亚远景-ISO 42001:汽车AI安全的行业标准新趋势
  • 数字孪生系统让汽车工厂虚实联动预测维护少停机
  • Flink-1.19.0-核心源码详解
  • Linux图文理解进程
  • Android-Kotlin基础(Jetpack①-ViewModel)
  • 软件测试中,pytest 运行完成后,如何自动发送邮件?
  • 解密MVCC:如何实现高效的数据库并发
  • Linux学习-数据结构(二叉树)
  • 【物联网】基于树莓派的物联网开发【24】——树莓派安装influxDB时序数据库
  • 关于AI应用案例计算机视觉、自然语言处理、推荐系统和生成式AI四大领域的详细技术分析。
  • 时序数据库的功能与应用价值
  • uniapp-vue2导航栏全局自动下拉变色