OpenCv基础(一)

本文介绍了OpenCV的基础操作,包括创建显示窗口、读取显示图片、保存图片、摄像头与视频的读取、视频录制,以及色彩空间的概念和转换,重点讲解了HSV、HSL和YUV色彩空间的使用。
摘要由CSDN通过智能技术生成

OpenCv基础(一)



一、基本操作

1.1 创建显示窗口

代码:

  • nameWindow(winname):创建命名窗口
    • winname:窗口名称
  • resizeWindow(winname,w,h):改变窗口大小
    • w:窗口宽度
    • h:窗口高度
  • imshow(winname,mat):显示窗口
    • mat:待显示图像
  • waitKey(delay):等待用户输入
    • 0表示结束任意按键,如果是其他整数,会等待 n 毫秒
  • destroyAllwindows():摧毁窗口
    • 摧毁所有窗口

代码示例:

import cv2

cv2.namedWindow('window')	# 窗口名称为window
cv2.resizeWindow('window',800,600)	# 窗口大小为800*600
cv2.imshow('window',0)	# 显示window窗口

key = cv2.waitKey(0)  # 0表示结束任意按键,如果是其他整数,会等待 n 毫秒
if key == ord('q'):		# 按q结束运行
    cv2.destroyAllWindows()

1.2 读取并显示图片

  • 在OpenCv中,默认读取彩色图片,读取的通道顺序为BGR;

  • imread(filename):

    • filename:待读取的图片路径及名称
import cv2
import matplotlib.pyplot as plt

# 默认按照彩色图片读取
image = cv2.imread("../my_work/01.png")
print(image)
plt.imshow(image)   # 用这个方法读取的图片与原图不一致,因为plt是按RGB通道读取
plt.show()  # 不加此代码,图片无法正常显示

# 所以opencv读取的图片,一般不用别的方式显示,比如matplotlib

# 封装显示函数
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)  # 0表示结束任意按键,如果是其他整数,会等待 n 毫秒
    cv2.destroyAllWindows()

cv_show('person',image)

1.3 保存读取到的图片

  • 将读取到的图片保存到磁盘中;

  • imread(filename,img):

    • filename:写入路径
    • img:待写入图片
import cv2

cv2.namedWindow('img')
cv2.resizeWindow('img',320,240)

img = cv2.imread("../my_work/01.png")

# 利用while循环优化退出逻辑
while True:
    cv2.imshow('img',img)
    key = cv2.waitKey(0)
    if key == ord('q'):
        break
    elif key == ord('s'):
        cv2.imwrite('../my_work/123.png',img)	# 保存图片路径

cv2.destroyAllWindows()

1.4 摄像头和视频的读取和显示

  • 在OpenCv中,也可以读取摄像头和视频;

  • VideoCapture(filename):

    • filename:若输入为摄像头,值=0;若输入为视频,值=视频路径
import cv2

# 打开视频文件
# cap = cv2.VideoCapture('../yolov5-6.0/runs/detect/exp/0.mp4')
# 打开摄像头
cap = cv2.VideoCapture(0)	# 0表示默认摄像头

# 循环读取摄像头的每一帧
while True:
    # 读一帧数据,返回标记,True表示读取到了数据
    flag,frame = cap.read()
    # 根据flag判断
    if not flag:
        # 没读到数据,结束循环
        break
    else:
        cv2.imshow('video',frame)
        key = cv2.waitKey(1000 // 60)   # 向下取整60帧
    if key == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

1.5 保存读取到的视频文件—视频录制

  • 将摄像头的输出进行保存;

  • VideoWriter(filename,fourcc,fps,frameSize):

    • filename:写入视频路径
    • fourcc:视频格式,mp4的格式为fourcc = cv2.VideoWriter.fourcc(*'mp4v')
    • fps:写入帧率
    • frameSize:写入尺寸
import cv2

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter.fourcc(*'mp4v')	# 视频格式

# 创建videoWriter
vw = cv2.VideoWriter('output.mp4',fourcc,30,(640,480))

while cap.isOpened():
    flag,frame = cap.read()
    if not flag:
        break
    # 写每一帧数据
    vw.write(frame)
    cv2.imshow("frame",frame)
    if cv2.waitKey(1000 // 30) == ord('q'):
        break
cap.release()
vw.release()
cv2.destroyAllWindows()

二、色彩空间

2.1 色彩空间概念

HSV , HSL , YUV三种色彩空间
2.1.1 OpenCv中用的最多的是HSV色彩空间
  • Hue:色相,即色彩(蓝色、红色等),用角度衡量,取值范围为0°-360°,从红色按逆时针方向计算,红色为0,绿色为120,蓝色为240

  • Saturation:饱和度,表示颜色接近光谱色的程度。一种颜色可以看作是某种光谱色与白色混合的结果,光谱色占比越大,饱和度越大,取值范围为0%-100%,值越大,颜色越饱和。即此参数控制混入白色的量

  • Value:明度,表示颜色明亮的程度,取值为0%(黑)-100%(白)之间,此参数控制混入黑色的量

2.1.2 HSL色彩空间
  • Hue:色相,即色彩(蓝色、红色等),用角度衡量,取值范围为0°-360°,从红色按逆时针方向计算,红色为0,绿色为120,蓝色为240

  • Saturation:饱和度,表示颜色接近光谱色的程度。与黑白无关,饱和度不受颜色中混入黑白色的多少,只看接近程度(用纯色稀释)

  • Lightness:亮度,控制纯色中混入的黑白两种颜色

2.1.3 YUV色彩空间
  • Y:表示明亮度,也就是灰阶值

  • U、V:表示色度,描述色彩及饱和度,用于指定像素颜色

  • 优点:只占用极少带宽

2.2 色彩空间的转换

  • 色彩空间转换只需用cv2.cvtColor代码即可;

  • cvtColor(src,code):

    • src:待转换图像
    • code:需要转换到的色彩空间;包括cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV
import cv2

def callback(value):	# 回调函数,在trackbar中需要用到
    pass

cv2.namedWindow('color',cv2.WINDOW_NORMAL)
cv2.resizeWindow('color',640,480)

# 读取图片,OpenCv默认读取的是BRG色彩空间
img = cv2.imread('../my_work/01.png')

# 定义颜色空间转化列表
colorspaces = [
    cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,
    cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV,
    cv2.COLOR_BGR2YUV
]
# 设置trackbar,可调节转换到指定色彩空间
cv2.createTrackbar('trackbar','color',0,4,callback)

while True:
    index = cv2.getTrackbarPos('trackbar','color')
    cvt_img = cv2.cvtColor(img,colorspaces[index])	# 转换到指定色彩空间
    cv2.imshow("color",cvt_img)
    key = cv2.waitKey(10)
    if key == ord('q'):
        break

cv2.destroyAllWindows()
  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值