opencv真货第一节

目录

一、图像视频的加载和显示

1.创建和显示窗口

2.加载显示图片

3.保存图片

 4.视频采集

 5.视频的录制

6.鼠标控制

 7.TrackBar控件


       

我这里默认大家已经完成了python+opencv的安装,很简单。个人推荐安装完python环境后,用pip安装opencv,网上教程有很多。

一、图像视频的加载和显示

1.创建和显示窗口

nameWindows()  创建命名窗口

imshow()  显示窗口

destroyAllwindows()  摧毁窗口

resizeWindow()  改变窗口大小

waitKey()   等待用户输入

基础代码展示:

import cv2 as cv
#创建窗口
#cv.WINDOW_AUTOSIZE是自动大小,不允许修改窗口大小
#cv.namedWindow('window',cv.WINDOW_AUTOSIZE)
cv.namedWindow('window',cv.WINDOW_NORMAL)
#更改窗口的大小
cv.resizeWindow('window',800,600)
#展示名字为window的窗口
cv.imshow('window',0)
#waitKey(0)代表按任意键消失
cv.waitKey(0)
#销毁所有的窗口
cv.destroyAllWindows()

2.加载显示图片

        imread(path, flag):使用imread可以读取图片,默认读取的是彩色图片.比如:

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
#读取图片
img=cv.imread('OIP-C.jpg')
print(img)
cv.imshow('img',img)
cv.waitKey(0)

      这里说明一点,可以使用matplotlib的库,plt.imshow() 显示的颜色与正常颜色不一样,这是因为OpenCV读取的图片颜色通道是按照BGR(蓝绿红)排列的,一般图片通道都是按照RGB来排列的。

3.保存图片

     imwrite(path, img,(paras)):使用imwrite保存图片。

     cv2.imwrite() 将 OpenCV 图像保存到指定的文件。
     cv2.imwrite() 基于保存文件的扩展名选择保存图像的格式。
     cv2.imwrite() 只能保存 BGR 3通道图像,或 8 位单通道图像、或 PNG/JPEG/TIFF 16位无符号单通道图像。
参数说明:

    path:要保存的文件的路径和名称,包括文件扩展名

    img:要保存的 OpenCV 图像,nparray 多维数组

    paras:不同编码格式的参数,可选项:

     cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
    cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
    cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。

 4.视频采集

  • 视频是由图片组成的,视频的每一帧就是一幅图片,一般是30帧,表示一秒显示30张图片。            cv2.VideoCapture可以捕获摄像头,用数字来表示不同的设备,比如0,1。
  • 如果是视频文件,可以直接指定路径即可。

对于自己电脑摄像头的读取:

#视频其实本质上就是由一幅一幅的图片组成的
import cv2
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
#打开摄像头
capture = cv2.VideoCapture(0)
#循环读取视频每一帧数据
while True:     #另外:capture.Opened()  返回的是True,false
    # 可以读到视频每一帧数据
    ret, frame = capture.read()
    frame = cv2.flip(frame,1)   #镜像操作
    cv2.imshow('video', frame)
    key = cv2.waitKey(50)
    #print(key)
    if key & 0xFF == ord('q'):  #判断是哪一个键按下
        break
#别忘了释放资源
cv2.destroyAllWindows()

 5.视频的录制

  • VideoWriter:参数一为输出文件,参数二为多媒体文件格式,参数三为帧率,参数四为分辨率。
  • write编码并写入缓存。
  • release缓存内容写入磁盘,并释放资源。
import cv2
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
cap=cv2.VideoCapture(0)
#视频格式cv2.VideoWriter_fourcc(*'XVID')或cv2.VideoWriter_fourcc('X','V','I','D')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
#四个参数,1.文件名称,2.格式设置,3.帧数,4.录得大小
vw = cv2.VideoWriter('output.avi',fourcc, 30.0, (640,480))
while cap.isOpened():   #判断能否读取帧数,ture或者false
    ret,frame=cap.read()
    if not ret:
        print('can not open')
        break
    else:
        frame = cv2.flip(frame, 1)
        vw.write(frame)
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('1'):
            break
cap.release()
vw.release()
cv2.destroyAllWindows()

另外说明录视频还有其他的格式:XVID,MP4V,,等。

6.鼠标控制

OpenCV允许我们对窗口上的鼠标动作做出响应。

  • setMouseCallback(winname, callback, userdata) winname是窗口的名字, callback是回调函数, userdata是给回调函数的参数。
  • callback(event, x , y, flags, userdata)回调函数必须包含这5个参数。event是事件(鼠标移动,左键,右键,x,y是点鼠标的坐标点, flags主要用于组合键, userdata就是上面的setMouseCallback的userdata
    鼠标事件:
  1. EVENT_MOUSEMOVE 0   鼠标移动
  2. EVENT_LBUTTONDOWN 1按下鼠标左键
  3. EVENT_RBUTTONDOWN 2按下鼠标右键
  4. EVENT_MBUTTONDOWN 3按下鼠标中键
  5. EVENT_LBUTTONUP  4 左键释放 
  6. EVENT_RBUTTONUP  5 右键释放
  7. EVENT_MBUTTONUP  6 中键释放
  8. EVENT_LBUTTONDBLCLK  7 左键双击
  9. EVENT_RBUTTONDBLCLK  8 右键双击
  10. EVENT_MBUTTONDBLCLK  9中键双击
  11. EVENT_MOUSEWHEEL 10  鼠标滚轮上下滚动
  12. EVENT_MOUSEHWHEEL 11鼠标左右滚动

上面表述的鼠标事件就是回调函数中的event值,一下会展示。

上代码:

#opencv 控制鼠标
import cv2
import numpy as np
#函数名可以随便取,但是参数必须是5个
#event 表示鼠标事件,x,y是鼠标的坐标
#flags鼠标的组合按键
def mouse_callback(event,x,y,flags,userdata):
    print(event,x,y,flags,userdata)
    if event==1: #按下鼠标左键event值变成1
        print('按了一下鼠标左键,伴随着左键释放,event=4')
    if event==2: #按下鼠标右键event值变成2
        print('按了一下鼠标右键,伴随着右键释放,event=5')
    #其他的一样可以进行测试,这里不测试了
#创建窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse',640,480)
#设置鼠标回调函数,123字符串不用管
cv2.setMouseCallback('mouse',mouse_callback,'123')
#生成会黑的图片
img=np.zeros((480,640,3),np.uint8)
while True:
    cv2.imshow('mouse',img)
    key=cv2.waitKey(1)
    if key==ord('q'):
        break
cv2.destoryALLWindows()

 7.TrackBar控件

  TrackBar控件可以控制RGB,还有其他的:

  •  createTrackbar(trackbarname, winname, value, count, onChange)创建TrackBar控件, value为trackbar的默认值, count为bar的最大值,最小为0。
  • getTrackbarPos(trackbarname, winname)获取TrackBar当前值。

创建trackbar

import cv2
import numpy as np
#创建窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse',640,480)
#定义回调函数
def callback(value):
    #print(value)
    pass
#创建三个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.getTrackbatPos('R','trackbar')
    g = cv2.getTrackbatPos('G', 'trackbar')
    b = cv2.getTrackbatPos('B', 'trackbar')
    #用获取到的三个值修改背景图片颜色
    img[:]=[b,g,r]
    cv2.imshow('trackbar',img)
    key=cv2.waitKey(0)
    if key==ord('q'):
        break
cv2.destroyALLWindows()

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值