IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV学习笔记(1):图像和视频的加载和显示 -> 正文阅读

[人工智能]OpenCV学习笔记(1):图像和视频的加载和显示

OpenCV学习笔记(1):图像和视频的加载和显示


想学习的全面一点看过来吧~ 最全注释,初学不懂的都在注释上面了

01 创建和显示窗口

# opencv名字叫做opencv 但是导包的时候cv2
import cv2

import matplotlib.pyplot as plt	
import numpy as np

"""
https://www.bilibili.com/video/BV12Z4y1z7jb?spm_id_from=333.337.search-card.all.click
【不要再看那些过时的OpenCV老教程了】2022巨献,OpenCV零基础小白最新版全套
33h19m46s
"""
# 01 创建和显示窗口
def display_window():
    cv2.namedWindow(winname="window",)
    # namedWindow(winname[, flags]) []代表可选参数 该函数创建一个可以放置图片或者可拖动控件的窗口,winname表示创建窗口的名字
    # WINDOW_NORMAL or WINDOW_AUTOSIZE:前者可以resize窗口大小;后者根据待显示图像大小自动调整窗口大小
    # WINDOW_FREERATIO or WINDOW_KEEPRATIO:ratio比例 是否保持图像长宽比
    # WINDOW_GUI_NORMAL or WINDOW_GUI_EXPANDED:前者时是绘制窗口的旧方法,没有状态栏和工具栏,而WINDOW_GUI_EXPANDED是一个新的增强的GUI。
    # 默认flags参数 == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED
    cv2.imshow('window', 0)
    key = cv2.waitKey(0)

    if key & 0xFF == ord('q'):  # ord是python中计算ascii值的函数 oxFF要不要都可以
        print('准备销毁窗口')
        # cv2.destroyWindow('window')	两种销毁窗口的方式
        cv2.destroyAllWindows()
        
display_window()

02 读取和显示图像

opencv 显示图片 读取图片的颜色通道是按照蓝绿红(BGR)
所以一般opencv读出来的图片不要用别的方式去展示 比如matplotlib
matplotlib显示 注意要加plt.show()函数

# 02 读取和显示图像
def display_picture():
    # opencv 显示图片 读取图片的颜色通道是按照蓝绿红(BGR)
    # 所以一般opencv读出来的图片不要用别的方式去展示 比如matplotlib
    img1 = cv2.imread('picture.png')
    cv2.imshow('test', img1)
    key = cv2.waitKey(0)  # @param delay Delay in milliseconds. 0 is the special value that means "forever". 0永远不关闭
    if key & 0xFF == ord('q'):
        cv2.destroyAllWindows()

    # # matplotlib显示 注意要加plt.show()函数
    # img2 = plt.imread('picture.png')
    #
    # # 对比一下两张显示方式
    # plt.subplot(1, 2, 1)
    # plt.imshow(img1)
    # plt.subplot(1, 2, 2)
    # plt.imshow(img2)
    # plt.show()

display_picture()

测试一下颜色通道不一致时的图像区别:
运行注释掉上边的plt绘图函数后有以下结果:
在这里插入图片描述
原图在这:
在这里插入图片描述

03 保存图片

cv2.imwrite(filename, img, params=None) 保存图片函数

# 03 保存图片
def save_picture():
    # 创建窗口
    cv2.namedWindow('img', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('img', 640, 480)

    # 读取图片
    img = cv2.imread('picture.png')
    while True:
        cv2.imshow('img', img)
        key = cv2.waitKey(0)

        # 按下q退出循环,按下s保存图片
        if key == ord('q'):
            break
        elif key == ord('s'):
            cv2.imwrite('123.jpeg', img)
        else:
            print(key)

    cv2.destroyAllWindows()
    
save_picture()

04 显示视频

cv2.VideoCapture(‘video.mp4’)
cv2.waitKey(1000 // 30) 读到的图片显示的时间 越小切换到下一帧的时间越短 相当于视频快进
想和原视频播放一致的话,需要计算延时时间 需要知道原先视频的帧数

# 04 显示视频
def display_video():
    cv2.namedWindow('img', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('img', 640, 480)

    # 读取视频文件
    cap = cv2.VideoCapture('video.mp4')
    # 打开摄像头 数字代表不同的设备 比如0 1
    # cap = cv2.VideoCapture(0)

    # 循环读取视频的每一帧
    while True:
        # 读一帧数据,返回标记和这一帧数据。True表示读到了数据,False表示没读到数据
        ret, frame = cap.read()  # 读一帧

        # 根据ret做个判断
        if not ret:
            # 没读到数据,直接退出
            break

        # 显示数据
        cv2.imshow('img', frame)

        # 加入一个视频是30帧,那么每张图之间要间隔多少毫秒
        key = cv2.waitKey(1000 // 30)  # 读到的图片显示的时间 越小切换到下一帧的时间越短 相当于视频快进
        # 想和原视频播放一致的话,需要计算延时时间 需要知道原先视频的帧数

        if key == ord('q'):
            break

    # 别忘了释放资源
    cap.release()
    cv2.destroyAllWindows()

display_video()

05 视频录制

# 05 视频录制
def record_video():
    cap = cv2.VideoCapture(0)
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')	# 对应mp4格式
    # fourcc = cv2.VideoWriter_fourcc(*'XVID')  #   avi格式 下面保存后缀名要改

    # 创建videowriter 30帧,640 480 为分辨率 帧数可调,分辨率不能错
    vw = cv2.VideoWriter('output.mp4', fourcc, 30, (640, 480))
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        # 写每一帧数据
        vw.write(frame)
        cv2.imshow('frame', frame)

        if cv2.waitKey(1000 // 30) == ord('q'):
            break

    # 别忘了release
    cap.release()
    vw.release()
    cv2.destroyAllWindows()


# record_video()

06 控制鼠标

# 06 控制鼠标
def control_mouse():
    import numpy

    # 函数名可以随便取,但是参数必须是5个
    # event表示鼠标事件,x,y是鼠标的坐标 flags鼠标的组合按键 userdata传入的数据
    # 想深入了解鼠标事件可以查一下
    def mouse_callback(event, x, y, flags, userdata):
        print(event, x, y, flags, userdata)

        # 按下鼠标右键退出
        if event == 2:
            cv2.destroyAllWindows()

    # 创建窗口
    cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('mouse', 640, 360)

    # 设置鼠标的回调函数
    cv2.setMouseCallback('mouse', mouse_callback, '123')

    # 生成全黑的图片
    img = numpy.zeros((360, 360, 3), np.uint8)
    while True:
        cv2.imshow('mouse', img)
        key = cv2.waitKey(1)
        if key == ord('q'):
            break

    cv2.destroyAllWindows()


control_mouse()

结果:
单击时显示在这里插入图片描述
为了方便大家,整理了一下常用的鼠标事件

事件名鼠标活动代号
EVENT_MOUSEMOVE鼠标移动0
EVENT_LBUTTONDOWN左键按下1
EVENT_RBUTTONDOWN右键按下2
EVENT_MBUTTONDOWN中键按下3
EVENT_LBUTTONUP左键释放4
EVENT_RBUTTONUP右键释放5
EVENT_MBUTTONUP中键释放6
EVENT_LBUTTONDBLCLK左键双击7
EVENT_RBUTTONDBLCLK右键双击8
EVENT_MBUTTONDBLCLK中键双击9
EVENT_MOUSEWHEEL滑动滚轮上下滚动10
EVENT_MOUSEHWHEEL滑动滚轮左右滚动11

07 TrackBar拖动控件的使用

# 07 TrackBar拖动控件的使用
def trackbar():
    cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('trackbar', 640, 480)

    # 定义回调函数
    def callback(value):
        # print(value)
        pass

    # 创建3个trackbar
    cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
    cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
    cv2.createTrackbar('B', 'trackbar', 0, 255, callback)

    # 创建背景图片
    img = np.zeros((360, 360, 3), np.uint8)

    while True:
        # 获取当前trackbar的值
        r = cv2.getTrackbarPos('R', 'trackbar')
        g = cv2.getTrackbarPos('G', 'trackbar')
        b = cv2.getTrackbarPos('B', 'trackbar')

        # 用获取到的值修改图片背景的颜色
        img[:] = [b, g, r]
        cv2.imshow('trackbar', img)
        key = cv2.waitKey(1)
        if key == ord('q'):
            break

    cv2.destroyAllWindows()


trackbar()

延时1ms即改变,也就是实时,没事可以玩一下,像画图的调色板一样

后边也会持续更新OpenCV系列的学习笔记的,觉得有用的小伙伴点个赞加个关注支持一下吧!一起学习!!!还有已完结的PyQt5可视化GUI界面设计系列哦~
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:57:29  更:2022-05-14 09:59:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:49:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码