Python版本opencv1
Python版本opencv 常用函数
img = cv2.imread("img.jpg",-1)#1代表BGR,0代表灰度图,-1代表BGRA带有透明度的图
cv2.imshow("img",img)#展示图片
cv2.waitKey(0)#等待按键,括号里面数字代表延时时间,单位是毫秒
cv2.waitKey(0) == ord('q')#判断是否按下q键,返回True或False
cv2.destroyAllWindows()#关闭窗口
cv2.imwrite("img.jpg",img)#保存图片
cap = cv2.VideoCapture(0)#0为打开默认摄像头,也可以填文件路径
ret,frame = cap.read()#读取摄像头的图像 返回值第一个是布尔值代表是否开启成功
#第二个类似于前面返回的图片,是一个三维矩阵
cap.get(propId) 是 VideoCapture 类中获取视频/摄像头属性的核心方法,用于查询视频流的各种参数和状态
| 属性名 | propId | 值 | 描述 | 返回类型 |
|---|---|---|---|---|
| cv2.CAP_PROP_FRAME_WIDTH | 3 | 帧宽度(像素) | float | |
| cv2.CAP_PROP_FRAME_HEIGHT | 4 | 帧高度(像素) | float | |
| cv2.CAP_PROP_FPS | 5 | 帧率(FPS) | float | |
| cv2.CAP_PROP_FRAME_COUNT | 7 | 视频总帧数 | float | |
| cv2.CAP_PROP_POS_FRAMES | 1 | 当前帧位置 | float | |
| cv2.CAP_PROP_POS_MSEC | 0 | 当前位置(毫秒) | float | |
| cv2.CAP_PROP_FOURCC | 6 | 编解码器FourCC代码 | float | |
| cv2.CAP_PROP_BRIGHTNESS | 10 | 亮度(相机) | float | |
| cv2.CAP_PROP_CONTRAST | 11 | 对比度(相机) | float | |
| cv2.CAP_PROP_SATURATION | 12 | 饱和度(相机) | float | |
| cv2.CAP_PROP_GAIN | 14 | 增益(相机) | float | |
| cv2.CAP_PROP_EXPOSURE | 15 | 曝光(相机) | float | |
| cv2.CAP_PROP_AUTOFOCUS | 39 | 自动对焦状态 | float | |
| cv2.CAP_PROP_BUFFERSIZE | 38 | 缓冲区大小 | float | |
| cv2.CAP_PROP_BACKEND | 42 | 当前后端标识符 | int | |
| cv2.CAP_PROP_MODE | 43 | 媒体类型 | int |
VideoWriter 是 OpenCV 用于创建和保存视频文件的核心类。 cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) fourcc是编码器四字符代码,fps是帧率,frameSize是视频尺寸,isColor是布尔值,用于指定是否是彩色视频。
# 使用解包操作符
cv2.VideoWriter_fourcc(*'XVID')
opencv画图
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.rectangle(img,(0,0),(511,255),(255,255,0),10)
cv2.circle(img,(447,63),63,(0,0,255),-1)
imread返回的是tuple,可以通过size和shape查看对应的大小
ROI
如果想要截图对应的图片,可以使用img[a:b,c:d]来截取宽b-a,长d-c的图片,其中a,b,c,d都是整数
ball = img[280:340, 330:390] img[273:333, 100:160] = ball
RGB
- 拆分通道 (Splitting Channels) b, g, r = cv.split(img) 作用:将BGR三通道图像拆分为三个独立的单通道图像 原理: cv.split() 函数返回包含三个通道的元组 等同于NumPy操作:b, g, r = img[:, :, 0], img[:, :, 1], img[:, :, 2] 结果: b:蓝色通道(二维数组,取值0-255) g:绿色通道 r:红色通道
- 合并通道 (Merging Channels) img = cv.merge((b, g, r)) 作用:将分离的三个通道重新组合为BGR图像 注意: 通道顺序必须为蓝-绿-红 (b, g, r) 使用元组作为参数 (b, g, r)
- 直接通道操作 (Direct Channel Manipulation) b = img[:, :, 0] 作用:直接获取蓝色通道(不调用函数) 语法解释: img[:, :, 0] = 所有行, 所有列, 第一个通道(B) img[:, :, 1] = 第二个通道(G) img[:, :, 2] = 第三个通道(R)
- 高效通道修改 (Efficient Channel Modification) img[:, :, 2] = 0 # 将所有红色像素设为零 作用:直接操作指定通道,无需先拆分图像 意义: 删除所有红色信息(只保留蓝绿色) 图像将呈现青蓝色调(因为红色缺失) 性能优势: 避免内存复制:直接在原图像上修改,避免创建新数组 速度提升:比先拆分再修改再合并快5-10倍 代码简洁:一行替代多行操作
为图像设置边框(填充) 如果要在图像周围创建边框(如相框),则可以使用cv.copyMakeBorder()。但是它在卷积运算,零填充等方面有更多应用。此函数采用以下参数:
src - 输入图像
top,bottom,left,right 边界宽度(以相应方向上的像素数为单位)
borderType - 定义要添加哪种边框的标志。它可以是以下类型:
cv.BORDER_CONSTANT - 添加恒定的彩色边框。该值应作为下一个参数给出。 cv.BORDER_REFLECT - 边框将是边框元素的镜像,如下所示: fedcba | abcdefgh | hgfedcb cv.BORDER_REFLECT_101或 cv.BORDER_DEFAULT与上述相同,但略有变化,例如: gfedcb | abcdefgh | gfedcba cv.BORDER_REPLICATE最后一个元素被复制,像这样: aaaaaa | abcdefgh | hhhhhhh cv.BORDER_WRAP难以解释,它看起来像这样: cdefgh | abcdefgh | abcdefg
value -边框的颜色,如果边框类型为cv.BORDER_CONSTANT
Enjoy Reading This Article?
Here are some more articles you might like to read next:
- Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
- Displaying External Posts on Your al-folio Blog
- Graph RAG with Milvus —— 纯向量库造图的多跳推理
- Hierarchical Indices 层级索引 —— 先粗后细的两级检索
- HyDE 与 HyPE —— 假设检索技术的两个方向
- 二叉树刷题总结
- RAG 技术体系化分类——从 Pipeline 阶段到失败模式
- MemoRAG 记忆增强型 RAG 总结
- Microsoft GraphRAG 基于知识图谱的 RAG 总结
- Multimodal RAG with Captioning 图像描述型多模态 RAG 总结