从零开始学 OpenCV:Python 图像处理核心操作实战

从零开始学 OpenCV:Python 图像处理核心操作实战

计算机视觉是人工智能领域的重要分支,而 OpenCV 则是处理图像和视频数据的利器。本文将基于 Python 版本的 OpenCV,从最基础的图像读取、显示,到视频处理、色彩通道操作、图像修改与缩放,手把手带你掌握计算机视觉的核心基础操作。

首先安装OpenCV的核心包和拓展包:

pip install opencv-python==3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install opencv-contrib-python==3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simple

opencv-python==3.4.18.65:OpenCV 的核心功能包,包含图像读取、处理、视频操作等基础功能,满足你之前代码中所有图像处理需求;

opencv-contrib-python==3.4.18.65:OpenCV 的扩展包,包含一些额外的高级功能(如特征检测、人脸识别等),且必须与核心包版本完全一致;

一、图像的基础读写与属性查看

1. 读取与显示图像

OpenCV 是计算机视觉领域最常用的库之一,它默认以 BGR 色彩模式读取图像(而非我们熟知的 RGB)。核心的图像读写显示操作仅需几行代码即可完成:

import cv2 import numpy as np # 读取图片(BGR格式) img = cv2.imread('img1.jpeg') # 显示图片:参数为窗口名称、图像数据 cv2.imshow('tupian', img) # 等待按键输入:0表示永久显示,返回按键ASCII码 key = cv2.waitKey(0) # 关闭所有窗口,释放内存 cv2.destroyAllWindows() 

2. 查看图像核心属性

读取图像后,我们可以通过 numpy 数组的属性查看图像的关键信息,这对后续处理至关重要:

# 图像形状:(高度, 宽度, 通道数) print('图像形状:', img.shape) # 数据类型:通常为uint8(0-255像素值) print('图像数据类型:', img.dtype) # 总像素数:高度×宽度×通道数 print('图像总像素数:', img.size) 

运行结果:

3. 读取灰度图

很多场景下我们需要处理灰度图像(单通道),只需在读取时指定参数:

import cv2 import numpy as np # 以灰度模式读取图像 gray_img = cv2.imread('img1.jpeg', cv2.IMREAD_GRAYSCALE) cv2.imshow('xx', gray_img) cv2.waitKey(0) cv2.destroyAllWindows() # 灰度图属性:仅(高度, 宽度),无通道数 print('灰度图形状:', gray_img.shape) # 保存处理后的图像 cv2.imwrite('img1_GRAY.jpeg', gray_img) 

运行结果:

二、视频文件的读取与处理

OpenCV 不仅能处理静态图像,还能轻松读取视频文件并逐帧处理:

import cv2 import numpy as np # 打开视频文件(参数为0可调用摄像头) video_capture = cv2.VideoCapture('video1.mp4') # 检查视频是否成功打开 if not video_capture.isOpened(): print('无法打开视频文件') exit() # 循环读取视频帧 while True: # ret:是否成功读取帧;frame:帧数据 ret, frame = video_capture.read() if not ret: # 读取完毕则退出循环 break # 将帧转为灰度图 gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('Video', gray_frame) # 按下ESC键(ASCII码27)退出,60ms/帧控制播放速度 if cv2.waitKey(60) == 27: break # 释放视频资源 video_capture.release() cv2.destroyAllWindows() 

运行结果:

三、ROI 与色彩通道操作

1. 提取感兴趣区域(ROI)

ROI(Region of Interest)是图像中我们关注的特定区域,通过 numpy 数组切片即可快速提取:

import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 提取ROI:[行范围, 列范围] → 对应[高度范围, 宽度范围] roi = img[30:230, 100:300] cv2.imshow('yuantu', img) cv2.imshow('qiepian', roi) cv2.waitKey(0) cv2.destroyAllWindows() 

运行结果:

2. 色彩通道的拆分与合并

OpenCV 读取的图像是 BGR 格式,我们可以拆分单个通道,也可以合并通道重构图像:

(1)拆分通道
import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 方法1:数组切片 b_channel = img[:, :, 0] # 蓝色通道 g_channel = img[:, :, 1] # 绿色通道 r_channel = img[:, :, 2] # 红色通道 # 方法2:cv2.split(效率稍低) b, g, r = cv2.split(img) # 注意:单独显示单通道为灰度图(仅亮度信息) cv2.imshow('b', b) cv2.imshow('g', g) cv2.imshow('r', r) cv2.waitKey(0) cv2.destroyAllWindows() 

运行结果:

(2)显示单通道彩色效果

若想直观看到单通道的彩色效果,需将其他通道置 0:

import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 复制原图像,避免修改原图 img_blue = img.copy() # 绿色通道置0 img_blue[:, :, 1] = 0 # 红色通道置0 img_blue[:, :, 2] = 0 cv2.imshow('result2', img_blue) cv2.waitKey(0) cv2.destroyAllWindows() 

运行结果:

(3)合并通道
# 合并BGR通道,重构原图像 merged_img = cv2.merge((b, g, r)) cv2.imshow('result3', merged_img) cv2.waitKey(0) cv2.destroyAllWindows() 

运行结果:

四、图像修改与缩放

1. 图像像素修改

我们可以直接通过数组赋值修改图像像素,实现如 “马赛克” 等效果:

import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 对指定区域赋值随机像素(马赛克效果) img[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3)) cv2.imshow('masike', img) cv2.waitKey(0) cv2.destroyAllWindows() # 图像拼接:将img1的区域替换到img2中 img1 = cv2.imread('img1.jpeg') img2 = cv2.imread('img2.jpeg') # 注意:替换区域尺寸需匹配 img2[200:350, 200:350] = img1[50:200, 100:250] cv2.imshow('b', img1) cv2.imshow('a', img2) cv2.waitKey(0) cv2.destroyAllWindows() 

运行结果:

2. 图像缩放

cv2.resize是调整图像大小的核心函数,支持指定尺寸或缩放比例两种方式:

import cv2 import numpy as np a = cv2.imread('img1.jpeg') # 方式1:指定目标尺寸(宽, 高) a_new = cv2.resize(a, (300, 200)) # 方式2:指定缩放比例(fx:x轴缩放系数,fy:y轴缩放系数) # a_new = cv2.resize(a,None,fx=1.5,fy=0.5) cv2.imshow('a', a) cv2.imshow('a_new', a_new) cv2.waitKey(0) cv2.destroyAllWindows()

运行结果:

五、总结

本文基于 OpenCV-Python,梳理了计算机视觉入门的核心操作,核心要点如下:

  1. OpenCV 默认以 BGR 格式读取图像,可通过参数读取灰度图,读写显示需配合与窗口管理imread/imshow/imwrite函数;
  2. 视频处理本质是逐帧读取与处理,需注意循环终止条件和资源释放;
  3. 图像的 ROI 提取、色彩通道拆分 / 合并、像素修改、缩放均基于 numpy 数组操作,是 OpenCV 处理的核心逻辑;
  4. 单通道显示为灰度图,若需彩色效果需将其他通道置 0,通道合并需按 BGR 顺序。

这些基础操作是计算机视觉进阶(如目标检测、图像分割、特征提取)的基石,掌握后可结合实际场景灵活扩展,比如实现图像水印、视频特效、人脸马赛克等功能。

Read more

【GitHub项目推荐--TypeTale(字字动画):免费AIGC视频创作工具】非开源

简介 TypeTale (字字动画)是一款专为内容创作者打造的完全免费的AIGC创作软件,主要用于小说推文、AI短剧、AI电影制作。它集成了多种AI能力,提供从文案处理到视频生成的全链路创作支持,承诺现有功能与基础功能永久免费。 🔗 GitHub地址 : https://github.com/TypeTale/TypeTale 🎬 核心价值 : AIGC视频生成 · 小说推文 · AI短剧 · 完全免费 · 中文优化 项目背景 : * 内容创作 :短视频内容创作需求增长 * AIGC技术 :AI生成内容技术成熟 * 成本控制 :降低视频制作成本需求 * 中文优化 :中文内容创作工具需求 * 开源生态 :开源创作工具生态 项目特色 : * 🆓 完全免费 :永久免费使用 * 🇨🇳 中文优化 :专为中文优化 * 🤖 AI集成 :多AI能力集成 * 🎬 视频生成 :全链路视频生成 * 🔧 易用性 :简单易用界面 技术亮点 : * 多模型支持 :支持多种AI模型 * ComfyUI集成 :深度ComfyUI集成 * 工作流系统

By Ne0inhk
在 NVIDIA DGX Spark部署 Stable Diffusion 3.5 并使用ComfyUI

在 NVIDIA DGX Spark部署 Stable Diffusion 3.5 并使用ComfyUI

📖 前言 随着 NVIDIA Blackwell 架构的问世,DGX Spark (Personal AI Supercomputer) 将桌面级 AI 算力推向了新的巅峰。这台怪兽级设备搭载了 GB200/GB10 级别的 GPU 和 NVIDIA Grace CPU (ARM64),并运行在最新的 CUDA 13 环境下。 然而,“最强硬件"往往伴随着"最难环境”。由于 Grace CPU 采用 ARM (aarch64) 架构,且 CUDA 13 过于前沿,传统的 PyTorch 安装方法极易失败。 本文将手把手教你如何在这台超级计算机上部署 Stable Diffusion

By Ne0inhk
GitHub Copilot安装使用

GitHub Copilot安装使用

GitHub Copilot 怎么安装使用 一、 安装前准备 1. 拥有一个 GitHub 账号:如果没有,请先在 GitHub 官网 注册。 2. 订阅 GitHub Copilot: * 访问订阅页面:登录 GitHub 后,访问 GitHub Copilot 官网。 * 选择订阅计划: * 个人版:适合独立开发者,提供 30 天免费试用,之后每月 $10 或每年 $100。 * 商业版 (Copilot for Business):适用于企业或团队,每位用户每月 $19。 * 教育优惠:学生、教师和热门开源项目维护者可免费使用,需通过身份验证。 * 完成支付:根据所选计划完成支付流程(个人版需绑定信用卡或

By Ne0inhk
[源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

[源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精

文章目录 * [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精 * 一. 部署实战:单卡环境的极速落地 * 1.1 🖥️ 环境配置の手把手教程 📝 * 部署准备:硬件与镜像 * 依赖安装:一行代码搞定 * 1.2 🚀 模型启动の参数与验证 ✅. * 二. 多场景能力验证:从工业到学术 * 2.1 🏥 医疗影像诊断:从模糊影像到病灶定位 * 2.2 🚦 交通流优化:动态拥堵预测与策略设计 * 2.3 🔍 考古文本破译:甲骨文符号的跨学科解读 * 三. 性能优化与问题解决 * 3.1 🚀 性能优化策略:让模型跑得更快 * 3.2 🛠️ 常见错误解决方案 * 四. 与同类模型对比 * 🍬 核心优势对比🍭 * 🍬 对比结论🍭 * 五、

By Ne0inhk