0
点赞
收藏
分享

微信扫一扫

OpenCV简单应用(二、视频流显示)

juneyale 2022-04-06 阅读 27
opencv

1.利用Numpy可以实现图像/视频的上下、左右颠倒操作。以下代码为4个窗口分别显示原始图、上下颠倒图、左右颠倒图、上下左右颠倒图:

import cv2
import numpy as np
#打开摄像头(只有一个摄像头则编号为0,若有2个则依次为0,1)
camera = cv2.VideoCapture(0)
#创建4个窗口
cv2.namedWindow('Original', cv2.WINDOW_NORMAL)
cv2.namedWindow('Flip UD', cv2.WINDOW_NORMAL)
cv2.namedWindow('Flip LR', cv2.WINDOW_NORMAL)
cv2.namedWindow('LR+UD', cv2.WINDOW_NORMAL)
#持续间隔1ms等待按键,若有按键跳出循环
while (cv2.waitKey(1)==-1):
    #读取摄像头数据并处理
    success, frame =camera.read()
    flip_ud=np.flipud(frame)  #上下颠倒
    flip_lr=np.fliplr(frame)  #左右颠倒
    flip_lrud=np.fliplr(flip_ud) #上下左右颠倒
    # 显示在4个窗口上
    cv2.imshow('Original', frame)
    cv2.imshow('Flip UD', flip_ud)
    cv2.imshow('Flip LR', flip_lr)
    cv2.imshow('LR+UD', flip_lrud)
#断开摄像头
camera.release()
#释放所有窗口
cv2.destroyAllWindows()

2.利用hstack,vstack可实现分屏显示,putText在图像上增添文字,代码如下:

import cv2
import numpy as np
#打开摄像头(只有一个摄像头则编号为0,若有2个则依次为0,1)
camera = cv2.VideoCapture(0)
#创建窗口
cv2.namedWindow('Webcam', cv2.WINDOW_NORMAL)
#持续间隔1ms等待按键,若有按键跳出循环
while (cv2.waitKey(1)==-1):
    #读取摄像头数据并处理,注意此处需要深拷贝(deep copy)
    success, frame =camera.read()
    original=frame.copy()
    flip_ud=np.flipud(frame)
    flip_lr=np.fliplr(frame).copy()
    flip_lrud=np.fliplr(flip_ud).copy()
    flip_ud=flip_ud.copy()
    #添加文字,分屏显示
    cv2.putText(original,'Original',(30,50),cv2.FONT_HERSHEY_COMPLEX,1.5,(255,255,255),2)
    cv2.putText(flip_ud,'Flip UD',(30,50),cv2.FONT_HERSHEY_COMPLEX,1.5,(255,255,255),2)
    cv2.putText(flip_lr,'Flip LR',(30,50),cv2.FONT_HERSHEY_COMPLEX,1.5,(255,255,255),2)
    cv2.putText(flip_lrud,'LR+UD',(30,50),cv2.FONT_HERSHEY_COMPLEX,1.5,(255,255,255),2)
    h1 = np.hstack((original, flip_ud))#第一行分两列
    h2 = np.hstack((flip_lr, flip_lrud))#第二行分两列
    vdisp = np.vstack((h1, h2))#显示两行
    cv2.imshow('Webcam',vdisp)
    
#断开摄像头
camera.release()
#释放所有窗口
cv2.destroyAllWindows()

3.putText( Mat& img, const string&text, Point org,int fontFace, double fontScale,Scalar color, int thickness=1, int lineType=8)
参数1:Mat& img,待写字的图片,返回值也是该值
参数2:const string& text,待写入的字符串
参数3:Point org, 第一个字符左下角坐标,格式为(x,y) 
参数4:int fontFace,字体类型,FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN,FONT_HERSHEY_DUPLEX 等
参数5:double fontScale, 字体大小
参数6:Scalar color,字体颜色,格式(B,G,R)
参数7:int thickness,字体粗细
参数8:int lineType,线型,默认值为8

4.浅拷贝与深拷贝
浅拷贝:当图像之间进行赋值时,图像数据并未发生复制,两个对象指向同一块内存,改变图像2会影响图像1
深拷贝:当图像之间进行赋值时,图像数据发生复制,两个对象指向不同的内存,改变图像2不会影响图像1

putText不能在上下/左右颠倒图片上执行,需利用.copy()进行深拷贝。

举报

相关推荐

0 条评论