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

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.xdnf.cn/news/17336.html

相关文章:

  • 【办公自动化】使用Python来自动化处理Excel表格有哪些方法?
  • 急危重症专科智能体”构建新一代急诊、手术与重症中心的AI医疗方向探析
  • 图像认知与OpenCV——图像预处理4
  • Java并发与数据库锁机制:悲观锁、乐观锁、隐式锁与显式锁
  • NFS 服务器与iSCSI 服务器
  • 安卓系统属性之androidboot.xxx转换成ro.boot.xxx
  • PostgreSQL 强制索引:当重复数据让优化器“失明”时的解决方案
  • 对话访谈|盘古信息×冠捷科技:全球制造标杆的智能化密码
  • 2025 年华数杯全国大学生数学建模竞赛C 题 可调控生物节律的 LED 光源研究--完整成品、思路、模型、代码、结果分享
  • 本地组策略编辑器无法打开(gpedit.msc命令异常)
  • Windows中安装rustup-init.exe以及cargo build报错443
  • Mac 电脑安装 ADB 环境完整指南
  • 【自动驾驶】《Sparse4Dv3》代码学习笔记
  • golang的面向对象编程,struct的使用
  • DLedger(自动选举)
  • 【多重BFS】Monsters
  • 人工智能——自动微分
  • Spring Boot + ONNXRuntime CPU推理加速终极优化
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • PostgreSQL面试题及详细答案120道(61-80)
  • 仁懋电子MOT11N45——音响电路的卓越选择
  • 亚马逊广告运营:有什么好用的辅助工具
  • 接口自动化-pytest
  • 如何实现冷库的远程监控?冷库远程监控物联网解决方案
  • Flink-1.19.0-核心源码详解
  • 汽车娱乐信息系统域控制器的网络安全开发方案
  • Redis为什么要引入多线程?
  • 齐护机器人小智AI_MCP图形化编程控制Arduino_ESP32
  • 2025 年最佳no-code和open-source AI Agents
  • GitCode 7月:小程序积分商城更名成长中心、「探索智能仓颉!Cangjie Magic 体验有奖征文活动」圆满收官、深度对话栏目持续热播