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

opencv-python的使用——from official tutorial(持续更新)

OpenCV-Python 是计算机视觉领域最流行的开源库之一,它结合了 OpenCV (Open Source Computer Vision Library) 的 C++ 高性能实现和 Python 的简洁易用特性,为开发者提供了强大的图像和视频处理能力。具有以下优势:

典型应用领域

  • 图像/视频处理与分析

  • 物体检测与识别

  • 人脸识别与生物特征识别

  • 增强现实(AR)

  • 自动驾驶视觉系统

  • 医学影像分析

  • 工业质检

丰富的算法库

  • 图像处理:滤波、几何变换、色彩空间转换
  • 特征提取:SIFT、SURF、ORB 等
  • 机器学习:SVM、KNN、决策树等
  • 深度学习:支持 TensorFlow、PyTorch 模型

丰富的算法库,比如:

  1. 人脸识别系统

    • 使用 Haar 级联或 DNN 进行人脸检测

    • LBPH 或 FaceNet 进行识别

  2. 车牌识别

    • 边缘检测定位车牌

    • OCR 识别字符

  3. 实时滤镜应用

    • 美颜滤镜

    • 风格化转换

  4. 运动追踪

    • 光流法追踪

    • 背景减除

一、 Gui Features in OpenCV

1.1加载图片

cv2.imread() 是 OpenCV 中用于从文件加载图像的核心函数,它将图像文件读取为 NumPy 数组,便于后续处理和分析。所以,在opencv-python中,图片的实际上是一个np数组。

image = cv2.imread(filename, flags=cv2.IMREAD_COLOR)
参数说明filename (字符串):图像文件的路径(支持格式:JPEG、PNG、BMP、TIFF等)flags (可选):读取模式标志,常用有以下几种:cv2.IMREAD_COLOR (默认):加载3通道BGR彩色图像(忽略透明度)cv2.IMREAD_GRAYSCALE:加载为单通道灰度图像cv2.IMREAD_UNCHANGED:按原样加载,包括alpha通道(4通道BGRA)cv2.IMREAD_ANYDEPTH:保留原始位深度cv2.IMREAD_REDUCED_COLOR_2/4/8:按比例缩小尺寸加载
返回值成功时返回 numpy.ndarray 多维数组失败时返回 None(文件不存在/格式不支持等)

demo

从路径中加载一张图片,并且从窗口中打开,最后保存到其他地方

import cv2
import sysimg = cv2.imread('/media/lee/软件/colmap_exp/instant/result/zj/images/VID_20250325_150846/0.0.png')print(type(img),img)if img is None:sys.exit("Error: Could not read the image.")cv2.imshow("display window",img)cv2.waitKey(0)
# cv2.waitKey(0) 中的 0 表示无限等待,即程序会一直暂停,直到用户按下任意键。
# 如果传入一个正整数(例如 cv2.waitKey(1000)),则表示等待指定的毫秒数(1000 毫秒 = 1 秒),之后程序会继续执行,无论用户是否按下键。cv2.destroyWindow("display window")cv2.imwrite('open-cv/read_image_output.png', img)
exit()

放大以后,可以看到各个像素的RGB数值:

print图片:

1.2加载视频

cv2.VideoCapture() 是 OpenCV(开源计算机视觉库)中用于从 摄像头视频文件网络流 捕获视频的函数。它是视频处理和计算机视觉应用的基础工具。

cv2.VideoCapture(source, [apiPreference])source(输入源):摄像头:0(默认摄像头)、1(第二个摄像头)等。视频文件:文件路径(如 "video.mp4")。网络/IP 摄像头:RTSP/HTTP 流地址(如 "rtsp://192.168.1.1/live")。apiPreference(可选):指定视频捕获的后端(如 cv2.CAP_DSHOW 用于 Windows 摄像头)。

demo1:加载本地视频,转为灰度图

import numpy as np
import cv2 as cvcap = cv.VideoCapture('/media/lee/软件/colmap_exp/instant/result/zj/video/VID_20250325_151144.mp4')while cap.isOpened():ret,frame = cap.read()# if frame is read correctly ret is Trueif not ret:print("Can't receive frame (stream end?). Exiting ...")breakgray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)cv.imshow('frame',gray)if cv.waitKey(1) == ord('q'):breakcap.release()#Closes video file or capturing device.
cv.destroyAllWindows()#Closes all OpenCV windows.

demo2:摄像头录像,保存

import cv2cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 编码格式
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))  # 输出文件while cap.isOpened():ret, frame = cap.read()if not ret:breakout.write(frame)  # 写入帧cv2.imshow("录制中...", frame)if cv2.waitKey(1) == ord('q'):breakcap.release()
out.release()  # 释放写入器
cv2.destroyAllWindows()

1.3draw different geometric shapes

包括多种形状

demo:使用直线,矩形,圆,椭圆,折线在纯黑图片上画出形状

import numpy as np
import cv2 as cv# create a black image
img = np.zeros((512,512,3),np.int8)
# cv.imwrite('open-cv/gui_features/draw_image.png',img)# draw a diagonal blue line with thickness of 5 px 
cv.line(img,(0,0),(511,511),(255,0,0),5)
# cv2.line(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)cv.rectangle(img,(394,0),(300,129),(0,255,0),3)
# cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)cv.circle(img,(347,363),(80),(0,0,255),-1)
# cv2.circle(img, center, radius, color, thickness=1, lineType=cv2.LINE_8, shift=0)cv.ellipse(img,(256,256),(100,50),0,0,360,(255,0,0),-1)
# cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=1, lineType=cv2.LINE_8, shift=0)pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
# cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
# isClosed:布尔值,指示多边形是否闭合cv.imshow("Line", img)
cv.waitKey(0)
cv.destroyAllWindows()

二、Image Processing in OpenCV

http://www.lqws.cn/news/162775.html

相关文章:

  • Git Svn
  • 今日学习:工程问题(场景题)
  • 数据库三范式设计---小白初学+案例引入
  • 一键切换不同状态,3D数字孪生场景搭建更便捷!
  • Amazing晶焱科技:电子系统产品在多次静电放电测试后的退化案例
  • React 第五十四节 Router中useRevalidator的使用详解及案例分析
  • [大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
  • MySQL——视图 用户管理 语言访问
  • 应用app的服务器如何增加高并发
  • Linux 里 su 和 sudo 命令这两个有什么不一样?
  • 【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】
  • 每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
  • CICD实战(一) -----Jenkins的下载与安装
  • HarmonyOS:如何在启动框架中初始化HMRouter
  • 【Redis】笔记|第10节|京东HotKey实现多级缓存架构
  • Sentinel微服务保护
  • Day45
  • 2025年ESWA SCI1区TOP,元组引导差分进化算法TLDE+黑箱优化,深度解析+性能实测
  • 如何使用 Redis 快速实现布隆过滤器?
  • 亲测解决The scripts pylupdate5.exe, pyrcc5.exe and pyuic5.exe which is not on PATH
  • 代码训练LeetCode(23)随机访问元素
  • 从零发布一个 Vue 3 Button 组件到 npm(基于 Vite)
  • Dify源码教程:账户和密码传递分析
  • HART通讯器防爆型不带蓝牙功能TREXCHPKL9S1操作指南
  • C语言| 指针在数组中的移动
  • 电商实践 基于token防止订单重复创建
  • 【C++进阶篇】C++11新特性(中篇)
  • 2025年阿里最新软件测试面试题:Web 测试+接口测试+App 测试
  • VMware VCSA 9.0 Install
  • AI问答-vue3+ts+vite:http://www.abc.com:3022/m-abc-pc/#/snow 这样的项目 在服务器怎么部署