相关文章推荐
仗义的青蛙  ·  Spring Cloud Gateway ...·  11 月前    · 
胆小的打火机  ·  ORACLE ...·  11 月前    · 
  • cv2.waitKey(0) 返回按键的ascii码的值,参数0表示接受任意按键,换成其他的整数表示等待按键的时间,单位毫秒.
  • cv2.destroyAllWindows() 关闭该线程打开的所有窗口
  • key = cv2.waitKey(0)
    if key == ord('q'):  # ord将字符转为其对应的ascii码
        cv2.destroyAllWindows()
    
    # 创建窗口
    cv2.namedWindow("window",cv2.WINDOW_AUTOSIZE) # WINDOW_AUTOSIZE不允许修改窗口大小
    cv2.namedWindow("window",cv2.WINDOW_NORMAL)
    # 更改窗口大小
    cv2.resizeWindow('window',800,600)
    # 展示名字为window的窗口
    cv2.imshow('window',0)
    # 等待按键 拓展:计算ascii码的值,python函数:ord('q') -> 113
    # waitKey会返回按键的ascii的值 参数0表示接受任意按键,其他的整数表示等待按键的时间,单位毫秒
    # 可以利用waitKey来销毁窗口,不用每次都销毁
    key = cv2.waitKey(0)
    # key是int型,最少都是16位,但是ascii码是8位 取出前八位来与ascii码比较
    if key & 0xFF == ord('q'): # 可以不写 & 0xFF
    # if key == ord('q'): 
        cv2.destroyAllWindows()
    

    opencv显示图像操作

    使用imread函数来读取当前的图片

    rose = cv2.imread('./rose.jpeg')
    rose.shape # (610, 610, 3)
    type(rose)
    展示图片(使用opencv自带的函数)

    opencv读进来的通道是BGR,不是传统的RGB 使用使用matplotlib的imshow的结果会与原图不同

    # matplotlib显示的图片和真实的图片颜色不一样
    plt.imshow(rose)
    
    # 所以opencv读进来的图片一般用自己的方式去展示
    cv2.imshow('rose',rose)
    key = cv2.waitKey(0)
    if key == ord('q'): 
        cv2.destroyAllWindows()
    封装显示图片的函数,默认按q退出

    # 封装函数,展示图片
    def cv_show(name,img):
        cv2.imshow(name,img)
        key = cv2.waitKey(0)
        if key & 0xFF == ord('q'): 
            cv2.destroyAllWindows()
    
    cv2.imwrite('tong.jpg',img)
    

    opencv标记图像操作

    先绘制一块空白的黑色背景板, 然后完成基础的画线,画圆,标记等操作 注意: OpenCV中坐标的顺序,见下面的绘图

    # 创建纯黑的背景来画图
    img = np.zeros((480,640,3),np.uint8)
    cv2.imshow('img',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    绘制背景板

    cv2.line(img, (10,20),(300,400), (0,0,255), 5)

    分别给出起始点,终点,颜色,粗细即可

    cv2.rectangle(img, (10,20),(300,400), (0,0,255), 5)

    分别给出左上角端点和右下角端点,颜色,粗细即可

    v2.circle(img, (320,240),100,(0,0,255), 5)

    opencv中不能显示中文,要显示中文需要借助PIL库,见下文

    cv2.putText(img,'Hello OpenCV',(50,400),cv2.FONT_HERSHEY_COMPLEX,2,[0,0,255])
    中文标注文字

    需要提前准备好用到的字体文件

    # 解决中文显示乱码
    from PIL import ImageFont,ImageDraw,Image
    # img = np.full((200, 200, 3),fill_value=255,dtype=np.uint8)
    img = cv2.imread('./rose.jpeg')
    font = ImageFont.truetype('./msyhbd.ttc',15)
    img_pil = Image.fromarray(img)
    draw = ImageDraw.Draw(img_pil)
    draw.text((100,350),'你好,我好,大家好', font = font,fill=(0,255,0,0))
    img = np.array(img_pil)
    cv_show('img',img)
    
    # 创建纯黑的背景来画图
    img = np.zeros((480,640,3),np.uint8)
    cv2.line(img, (10,20),(300,400), (0,0,255), 5)
    # 画矩形
    cv2.rectangle(img, (10,20),(300,400), (0,0,255), 5)
    # 画圆 参数:圆心坐标,半径大小,颜色,粗细
    cv2.circle(img, (320,240),100,(0,0,255), 5)
    # 画文字
    cv2.putText(img,'Hello OpenCV',(50,400),cv2.FONT_HERSHEY_COMPLEX,2,[0,0,255])
    cv2.imshow('img',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    opencv调用摄像头操作

    可以根据需要增加存储当前摄像头拍摄图片的操作 如 cv2.imwrite('tong.jpg',frame)

    frame中存储的是摄像头拍到的图像 cv2.waitKey(1000//24) 表示一秒24帧

    # 打开摄像头
    cap = cv2.VideoCapture(0) # cap代表被打开的摄像头
    while 1:
        # 从摄像头中读取一帧数据
        ret, frame = cap.read() # frame 存储了读取到的数据
        cv2.imshow('img',frame)
        key = cv2.waitKey(1000//24)
        if key == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
    

    OpenCV摄像头人脸识别

    在python下载路径中Lib\site-packages\cv2\data找到如下文件在这里插入图片描述

    摄像头与人脸识别代码如下

    # 摄像头人脸识别
    # 使用opencv提供的人脸识别算法(人脸识别器)
    face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_alt.xml')
    # 打开摄像头
    cap = cv2.VideoCapture(0) # cap代表被打开的摄像头
    while 1:
        # 从摄像头中读取一帧数据
        ret, frame = cap.read() # frame 存储了读取到的数据
        # 将获取到的数据进行灰度处理
        gray = cv2.cvtColor(frame,code=cv2.COLOR_BGR2GRAY)
    #     cv2.imshow('img',gray)
        # 在进行灰度处理后的图片中识别人脸
        faces = face_detector.detectMultiScale(gray) # 被识别到的多张人脸
        for x,y,w,h in faces:
            cv2.circle(frame,(x+w//2,y+h//2),w//2,[0,255,0],2) # 用圆圈圈出识别人脸
        cv2.imshow('frame',frame)
        key = cv2.waitKey(1000//24)
        if key == ord('q'):
            break
        # cv2.imwrite('tong.jpg',frame)
    cap.release()
    cv2.destroyAllWindows()
    复制代码
    分类:
    人工智能