opencv基本使用方法!!!
使用数据集:https://download.csdn.net/download/weixin_43715360/13944379

  • opencv

    1. 介绍:计算机视觉和机器学习库,实现了图像处理和计算机视觉方面的很多通用算法
    2. 安装:pip(conda) install opencv-python
    3. opencv简单使用
      import cv2
      
      #1. 读取图片
      img = cv2.imread("opencv_image/dong.jpg")
      # print(img.shape)#  (300, 400, 3)  分别是 高、宽、像素
      print(img)#顺序不是rgb,是bgr
      #2. 显示图片
      cv2.imshow('dong',img)
      #3.1 直接显示imshow会闪退,我们可以设置延迟关闭来控制显示时间
      #3.2 能够监听键盘输入的内容
      cv2.waitKey()#单位是毫秒  按任意键退出窗口
      #设置一直显示,不传入时间或者传入0即可
      #4.销毁资源
      cv2.destroyAllWindows()
      
    4. opencv图片人脸识别
      import cv2
      
      #准备.人脸特征数据包:本地库中cv2的data文件夹中
      dong = cv2.imread("opencv_image/dong.jpg")
      #1. 加载人脸特征数据包
      face_detect = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
      #2. 调用识别人脸的方法
      # 如果识别到人脸,返回二维列表,每个列表四个值分别是:横纵坐标和宽高
      # 如果识别不到人脸,返回空元组
      faces = face_detect.detectMultiScale(dong)
      #3. for循环标记每一张人脸
      for x,y,w,h in faces:
          #4. 标记
          # 参数1:被标记的图片
          # 参数2:人脸的左上角的坐标
          # 参数3:人脸的右上角的坐标
          # 参数4:标记人脸线框的颜色
          # 参数5:标记人脸线框的边框宽度
          cv2.rectangle(dong,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255],thickness=2)
      #5. 显示图片
      cv2.imshow("dong",dong)
      cv2.waitKey()
      cv2.destroyAllWindows()
      
    5. opencv转黑白图片
      import cv2
      
      img = cv2.imread("opencv_image/sundog.jpg")
      #1. 修改图片大小
      bigImg = cv2.resize(img,dsize=(800,800))
      #2. 转为黑白图片   to
      grayImg = cv2.cvtColor(bigImg,code=cv2.COLOR_BGR2GRAY)
      cv2.imshow('img',grayImg)
      cv2.waitKey()
      cv2.destroyAllWindows()
      
    6. 人脸马赛克案例
      import cv2
      
      #1. 读取图片
      dong = cv2.imread("opencv_image/sundog.jpg")
      #1. 加载人脸特征数据包
      face_detect = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
      sample = 10
      #2. 调用识别人脸的方法
      # scaleFactor:缩放因子,默认应该是1.3  值越小,扫描越严格
      # minNeighbors:最小邻居数  默认应该是3,值越大,越严格
      faces = face_detect.detectMultiScale(dong)
      #3. for循环标记每一张人脸
      for x,y,w,h in faces:
          face = dong[y:y+h,x:x+w]
          #4. 打码就是变模糊,图片是有很多像素点组成的
          #  在原来人脸图片上,每隔10个像素取1个
          face = face[::sample,::sample]
          #5. 根据打码之后图片的像素点
          #  原人脸:200*200
          #  打码之后:20*20
          # 思路:打码之后一个像素点顶原图人脸10个像素点
          # (0,0)----->(0,0)
          # (1,0)----->(10,0)
          # (1,1)----->(10,10)
          for i in range(h//sample): #控制高
              for j in range(w//sample):#控制宽
                  dong[y+i*sample:y+sample+i*sample,x+j*sample:x+sample+j*sample] = face[i,j]
      #6. 显示图片
      cv2.imshow("dong",dong)
      cv2.waitKey()
      cv2.destroyAllWindows()
      
    7. 摄像头人脸标记与人脸存储
      import cv2
      import os
      
      faceImg = "face"
      #判断文件夹是否存在,如果不存在则创建
      if not os.path.exists(faceImg):
          os.mkdir(faceImg)
      #1. 开启摄像头
      video = cv2.VideoCapture(0)#笔记本摄像头的编号是0
      face_detect = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
      i = 1
      #2. 摄像头读取很多帧图片,然后对图片进行识别
      while(True):
          #3. 读取摄像头的图片
          # flag:是否读取到图片
          # video_img:获取到每帧图片
          flag,video_img = video.read()
          #4. 识别图片
          faces = face_detect.detectMultiScale(video_img)
          for x, y, w, h in faces:
              cv2.rectangle(video_img, pt1=(x, y), pt2=(x + w, y + h), color=[0, 0, 255], thickness=2)
              #5. 采集人脸图片(只要人脸)
              face = video_img[y:y+h,x:x+w]
              #6. 保存到本地
              cv2.imwrite("{}/{}.jpg".format(faceImg,i),face)
              print("第{}张人脸存储完成".format(i))
          cv2.imshow("img",video_img)
          #摄像头1秒30帧
          cv2.waitKey(1000//30)
          i+=1
      #关闭窗口
      cv2.destroyAllWindows()
      
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐