openCV笔记

本文持续更新中…

说明

这篇博文使用的是教材《opencv 3计算机视觉 Python语言实现》,仅作为笔记参考

1 基本输入输出

1.1读,写图像文件;灰度图;显示图片;

将图像存为灰度图

import cv2

img = cv2.imread(r'C:\Users\Lenovo\Desktop\water_drop.jpg',cv2.IMREAD_GRAYSCALE)  #读取为灰度图
cv2.imwrite(r'C:\Users\Lenovo\Desktop\water_drop.png',img)  #保存为.png图片

原图
在这里插入图片描述
保存后的图
在这里插入图片描述
直接读取为灰度图

上面我们读取读灰度图的方法是:第二个参数为cv2.IMREAD_GRAYSCALE; 总结如下:

  • cv2.IMREAD_COLOR: 加载原图,没有透明度(即透明度为0),这是默认参数
  • cv2.IMREAD_GRAYSCALE :图片设置为灰度图模式
  • cv2.IMREAD_UNCHANGED:图片包含alpha通道

上面三点分别可以通过1,0,-1代替。如灰度图为0

img = cv2.imread(r'C:\Users\Lenovo\Desktop\2.png',0)

显示图片
图片可以通过cv2.imshow()显示,但可能会一闪而过,随时消失(笔者遇到的是图片一直无法显示,终端还被迫中断)

import cv2

img = cv2.imread(r'C:\Users\wudl\Desktop\1.png')  #读取图片
cv2.imshow('myimg',img) #显示图片

于是在上面的代码上增加如下部分

import cv2

img = cv2.imread(r'C:\Users\wudl\Desktop\1.png')  #读取图片
cv2.imshow('myimg',img)
cv2.waitKey()
cv2.destroyAllWindows()

最后两行是用来保证显示窗口一直更新。

1.2 生成随机图像

import numpy as np
import cv2

img2 = np.random.randint(0,256,size=(300,400)) #范围是[0,256)的整数
img3 = img2.reshape(100,400,3)   #三维BGR图
cv2.imwrite(r'C:\Users\Lenovo\Desktop\random_img.png',img2)
cv2.imwrite(r'C:\Users\Lenovo\Desktop\random_img1.png',img3)

在这里插入图片描述
在这里插入图片描述

1.3将图片去掉某一色调

图片是BGR的三维顺序,原图如下
在这里插入图片描述
现在要去掉绿色

img4 = cv2.imread(r'C:\Users\Lenovo\Desktop\1.png')
img4[:,:,1] = 0   #将绿色G设置为0,这里0,1,2分别对于BGR
cv2.imshow('myimg',img4)

在这里插入图片描述

1.4视频文件读写

OpenCV提供VideoCapture类读取视频以及VideoWriter类写视频。视频的每一帧通过VideoCapture类下的read()函数获取,每一帧都是BGR图片。
假如事先有一个名为myinput.avi的视频(opencv默认输出视频格式为avi)

import cv2

videoCapture = cv2.VideoCapture(r'F:\course\English\meeting\myinput.avi') #输入视频
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))) #获取帧的高宽
videoWriter = cv2.VideoWriter('myoutput.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)  #输出名和格式

success, frame = videoCapture.read()
while success:
    videoWriter.write(frame)
    success, frame = videoCapture.read() #当success为False结束while循环

# print(success,frame) 验证最后输出的success

执行之后保存的视频为myoutput.avi,如果我们执行了最后一句,会发现success,frame在视频结束时为False和None。
补充:
fps是每秒帧数,即帧速度,frame per second的简写

1.5捕获摄像头的帧

通过以下代码会自动打开摄像头并拍摄10秒视频

import cv2

cameraCapture = cv2.VideoCapture(0)
fps = 30
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter('myoutput.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)

success, frame = cameraCapture.read()
numFramesRemaining = 10*fps -1
while success and numFramesRemaining > 0:
    videoWriter.write(frame)
    success, frame = cameraCapture.read()
    numFramesRemaining -=1
cameraCapture.release()

使用opencv处理图像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值