从0到1的OpenCV快速入门基础(学习笔记)

246 阅读3分钟

本文是编者二刷OpenCV的笔记,请在Python基础入门后使用~

图像的读取

在读取图像之前,我们先要安装OpenCV第三方库(下载第三方库opencv-python

读取图片

import cv2
img = cv2.imread('你要插入的图片路径.jpg') 
cv2.imshow('图片标题',img)

第二行代码读取本地里的图片

第三行代码是对图片的展示

图片的延时结束

在图片的读取中,我们imshow图片后图片只会一闪而过。这时我们可以cv2.waitKey()来延缓程序的结束。

cv2.waitKey()表示等待键盘的输入。cv2.waitKey(1000)表示等待1000毫秒让键盘的输入,在1000毫秒后键盘如果还未输入,图片自动关闭。cv2.waitKey(0)表示一直等待键盘输入,直到键盘输入程序结束(waitKey函数还可以在影片的播放中控制播放速度)。

综上,读取程序的完整写法为

import cv2
img = cv2.imread('你要插入的图片名.jpg') 
cv2.imshow('图片标题', img)
cv2.waitKey(0)

图片大小的改变

方法一:将img1的大小改为300像素×300像素并存到变量img2img2 = cv2.resize(img1, (300,300))

方法二:将img1的宽改为原来图像的0.6倍、高改为原来的0.8倍并存到变量img2img2 = cv2.resize(img1, (0,0),fx = 0.6,fy = 0.8)

读取视频

影片的读取其实实质上就是去影片中的图片每一帧每一帧的读取出来,所以我们可以这样做:

import cv2
cap = cv2.VideoCapture('你要插入的影片名.mp4')
while True:
    ret,frame = cap.read()   # read函数会return两个值,存储在ret里的是bool类型,判断影片是否成功读取下一帧;如果读取成功,下一帧便会存储在frame里的。
    if ret:
        cv2.imshow('影片标题',frame)
    else:
        break
    cv2.waitKey(1) # waitKey中的数字在影片读取中就是每一帧的停顿时间,可以凭此控制播放速度

read函数会return两个值,存储在ret里的是bool类型,判断影片是否成功读取下一帧;如果读取成功,下一帧便会存储在frame里的。

waitKey中的数字在影片读取中就是每一帧的停顿时间,可以凭此控制播放速度。

导出电脑自带摄像头

cap = cv2.VideoCapture(0)

一般来说电脑自带的摄像头编号是“0”,所以我们可以将视频导出的cap = cv2.VideoCapture('你要插入的影片名.mp4')改为cap = cv2.VideoCapture(0)# 编号也可能是1 ,这样就可以成功导出摄像头了。

阵列(自建图片)

图片实质上是一组多维阵列(编者理解为速度很快的列表,因为阵列和列表都是用“[ ]”表示)

import cv2
img = cv2.imread('图片名.jpg')

取得图片阵列各维度的大小:print(img.shape)

取得图片的具体阵列:print(type(img))

阵列的最小维度中一般有三个值[B,G,R](注意不是R,G,B)。

了解了图片的阵列后,我们就可以创建自己的图片了。

创建一个多维阵列:np.empty()

创建一个300×300像素大小的图片:np.empty((300, 300, 3),np.nint8)

创建图片:

import cv2  
import numpy as np
img = np.empty((300,300,3), dtype=np.uint8)
for row in range(300):  
    for col in range(300):  
        img[row][col] = [row%255, col%255, (row+col)%255]
cv2.imshow('img', img)
cv2.waitKey(0)