python中openCV2/numpy/matplotlib.pylab/PIL使用小例子

1. CV2库进行图片操作

#图片操作
#导入对应的库
import numpy as np
import cv2

#导入对应的图片 imread为图片路径
girls = cv2.imread('./girl.jpg')
#查看图片的数据形状(黑白为2维数据,彩色为3维数据)
girls.shape

#展示图片,窗口名为girl,加载数据为girls
cv2.imshow('girl',girls)
#等待键盘输入,单位毫秒,如果为0 无限等待
cv2.waitKey(0)
#关闭图形窗口
cv2.destroyAllWindows()

#BGR 颜色通道BGR
#PIL RGB  设置为灰色
girls2 = cv2.cvtColor(girls,code = cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',girls2)
cv2.waitKey(0)
cv2.destroyAllWindows()

#图片输出保存为girls_gray.jpg
cv2.imwrite("./girls_gray.jpg",girls2)


#设置图片的大小144,158
girls3 = cv2.resize(girls,dsize = (144,158))
cv2.imshow('min',girls3)
#设置退出条件
while True:
    if ord('q') == cv2.waitKey(3000):
        break

cv2.destroyAllWindows()

2. 数据操作

#导入库
import numpy as np

#设置一个列表
l = [1,2,3,4,5,6,7]
#作为array数组
nd = np.array(l)
#求和
nd.sum()
#标准差
nd.var()
#标准差
nd.std()
#查看数据类型
nd.dtype
#指数 e
np.exp(3)

a = np.array([1,3,5,7,np.NAN])
b = a + 10
#统计学  平均值/中位数/方差/标准差/协方差(两个属性求解)/关联(相关性系数)
#a和b相关
np.corrcoef(a,b)


nd = np.random.randint(0,1000, size= 100)
#查找数组nd中少于109的值
np.argwhere(nd <= 109)
#直方图,统计数据出现的频次
np.histogram(nd,bins = 10)
#保存数据
np.savetxt('./data.txt',nd)
#读取文件
np.loadtxt('./data.txt')
#获取最小的5个数
np.partition(nd,kth = 5)[:5]
#获取最大的5个数
np.partition(nd,kth = -5)[-5:]


#随机生成array数组 4*5
nd2 = np.random.randint(0,150,size= (4,5))
#选取数组中的元素
nd2[1,1]
#进行切片操作,前三行
nd2[0: 3]
#前三行,前三列
nd2[0:3,0:3]

 

3. PIL图片操作

#导入对应库
from PIL import Image
#导入对应图片
girl = Image.open('girls.jpg')

#图片数据为ndarray
#彩色图片三维,高度/宽度/像素 红绿黄
girls = np.array(girl)
#行 列 像素
girls.shape
#数据类型
girls.dtype
#最大值
girls.max()

#array转换成image
girls2 = girls[:,:,::-1]
Image.fromarray(girls2)

#图片缩小
Image.fromarray(girls[::5,::5])

#更改颜色
Image.fromarray(girls[:,:,[1,0,2]])

#图片变为黑白
Image.fromarray(girls[:,:,0])

4. matplotlib.pylab图片操作

#导入对应包
import matplotlib.pylab as plt
%matplotlib inline

#加载图片
plt.imshow(girls)

#图片旋转180
plt.imshow(girls[::-1])

#图片模糊处理
plt.imshow(girls[::-10,::-10])

# 剪切图片
girls6 = girls[:,:230]
plt.imshow(girls6)

#拼接图片
girls7 = np.concatenate([girls6,girls],axis = 1)
plt.imshow(girls7)

5. openCV操作视频

#导入对应库
import numpy as np
import cv2

#读取视频
cap = cv2.VideoCapture('./video.mp4')
#读取视频中的每一帧数据
flag,frame = cap.read()

#播放视频画面  一帧
cv2.imshow('nothing',frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

#循环播放每一帧画面
while cap.isOpened():
#每一帧数据都读取
    flag,frame = cap.read()
    cv2.imshow('norhing',frame)
#读取到最后一帧
    if flag == False:
        break
#输入q为退出
    if ord('q') == cv2.waitKey(5):
        break
cv2.destroyAllWindows()
#资源释放
cap.release


#参数为零调取本地摄像头
# cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture('./video.mp4')

#调取训练集 https://github.com/opencv/opencv/tree/master/data/haarcascades_cuda
detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')

while cap.isOpened():
    flag,frame = cap.read()
    
#设置红色圆圈圈出人脸
    gray = cv2.cvtColor(frame,code = cv2.COLOR_BGR2BGRA)
    
#设置对应参数,获得最优识别
    face_zone = detector.detectMultiScale(gray,scaleFactor = 1.3, minNeighbors = 5)
    
#对应坐标画圆
    for x,y,w,h in face_zone:
        cv2.circle(frame,center = (x + w//2,y + h//2),radius = w//2, color = [0,0,255],thickness = 2)
    
    if flag == False:
        break
        
    cv2.imshow('norhing',frame)
    
    if ord('q') == cv2.waitKey(5):
        break
cv2.destroyAllWindows()
cap.release

 

posted @ 2020-04-05 16:26  MARK_REAPER  阅读(373)  评论(0编辑  收藏  举报