【OpenCV学习】(二)数据的加载和展示

背景

在实际工程中,最重要的往往是数据的读取和展示,OpenCV能够支持图像和视频数据,并且给予了很好的支持;不管是做传统项目还是基于深度学习的项目,读取数据都是必不可少的;

创建和显示窗口

使用API

  • namedWindow():创建一个窗口,给定名字和传窗口类型;
  • imshow():展示窗口;
  • destroyAllWindows():销毁所有窗口;
  • resizeWindow()

代码案例

import cv2
// cv2.WINDOW_NORMAL是定义一个可调整大小的窗口
cv2.namedWindow('window', cv2.WINDOW_NORMAL)
cv2.resizeWindow('window', 1920, 1080)
cv2.imshow('window', 0)

key = cv2.waitKey(0)
if(key == 'q'):
    cv2.destroyAllWindows()

读取图片

  • imread(图片路径,图片类型)
    图片类型一般情况下有两种:0表示灰度图,1表示彩色图,不传值默认为彩色图;

代码案例

img = cv2.imread('test2.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)

保存图片

  • imwrite(图片保存路径及名称,Mat格式数据)

代码案例

imwrite("save.jpg", img)

视频采集和读取

使用API:

  • VideoCapure():参数需要设备id号,默认填0即可;
    注意:如果想要读取视频,只需要将传入参数改为视频路径即可;
  • read():返回两个值,第一个为状态值(读取到为true),第二个值为视频帧;
  • release():释放视频资源;

代码案例

cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    cv2.imshow('video', frame)
    key = cv2.waitKey(10)
    # 键盘事件,用户输入q退出
    if(key == ord('q')):
        break
cap.release()
cv2.destroyAllWindows()

视频录制

使用API

  • VideoWrite():参数一为输出文件,参数二为多媒体文件格式,参数三为帧率,参数四为分辨率;
  • VideoWriter_fourcc(*‘四字符格式’):创建多媒体文件格式;
    媒体文件格式举例:DIVX(.avi)、MJPG(.mp4)、X264(.mkv)
  • write():将数据写入视频文件中;
  • release():释放资源;

代码案例

# 创建VideoWriter为写多媒体文件
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 注意如果读取摄像头数据的话,保存的分辨率需要和摄像头采集的一致
vw = cv2.VideoWriter('./out.mp4', fourcc, 25, (1280, 720))

    # 写数据到多媒体文件, 中间省略读取数据部分
    vw.write(frame)

# 释放VideoWriter
vw.release()

鼠标控制

使用API

  • setMouseCallback(winname,callback,userdata)
  • callback(event,x,y,flags,userdata):event就是事件(鼠标移动、按下左键等),flags是鼠标键及组合键;

event的类别可以参考源码中highgui.hpp的定义:

opencv获取窗口中心坐标 opencv显示到指定窗口_opencv获取窗口中心坐标

代码案例

#鼠标回调函数
def mouse_callback(event, x, y , flags, userdata):
    print(event, x, y, flags, userdata)

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

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

#显示窗口和背景
img = np.zeros((360, 640, 3), np.uint8)
while True:
    cv2.imshow('mouse', img)
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

上述代码创建了一个窗口,并传入一个全黑的图像,会返回鼠标事件的值,如下图:

opencv获取窗口中心坐标 opencv显示到指定窗口_opencv_02

TrackBar控件

使用API

  • createTrackbar(trackname,winname,默认当前值,最大值,callback函数)
  • getTrackbarPos(trackname,winname)

代码案例(一个简单调色板,调整RGB的值):

def callback():
    pass

#创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)

#创建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((480, 640, 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(10)
    if key & 0xFF == ord('q'):
        break
        
cv2.destroyAllWindows()

opencv获取窗口中心坐标 opencv显示到指定窗口_图像处理_03

随机调了一个我喜欢的海蓝色,大家可以自己尝试调出自己喜欢的颜色;