欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > opencv-python的使用——from official tutorial(持续更新)

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

2025/6/6 13:27:29 来源:https://blog.csdn.net/m0_74310646/article/details/148453093  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词