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

  1. 拆分通道 (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:红色通道
  2. 合并通道 (Merging Channels) img = cv.merge((b, g, r)) ​​作用​​:将分离的三个通道重新组合为BGR图像 ​​注意​​: 通道顺序必须为蓝-绿-红 (b, g, r) 使用元组作为参数 (b, g, r)
  3. 直接通道操作 (Direct Channel Manipulation) b = img[:, :, 0] ​​作用​​:直接获取蓝色通道(不调用函数) ​​语法解释​​: img[:, :, 0] = 所有行, 所有列, 第一个通道(B) img[:, :, 1] = 第二个通道(G) img[:, :, 2] = 第三个通道(R)
  4. 高效通道修改 (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_101cv.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: