• 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
  • 相关阅读:
    数据库实验2
    jsp 配置MySQL服务器 以及数据的插入和读取
    利用JSP编程技术实现一个简单的购物车程序
    【servlet3.0新特性】Annotation注解配置
    用Servlet实现聊天室设计
    PHP fopen和fwrite函数实现创建html页面
    Django框架 之 view视图
    Django框架 之 URLconf
    Django框架 之 模板语言
    Django框架 之 ORM 常用字段和参数
  • 原文地址:https://www.cnblogs.com/markReaper/p/12637743.html
Copyright © 2020-2023  润新知