机器视觉学习(二)—— 显示图像和视频

一、获取图像

要使用OpenCV获取图像,你需要安装OpenCV库并学习基本的OpenCV函数。下面是一些获取图像的基本步骤:

  1. 导入必要的库:import cv2

  2. 读取图像:image = cv2.imread("image.jpg") 这将从指定路径读取图像,并将其存储在名为image的变量中。

python 复制代码
import cv2

# 读取图像
image = cv2.imread("image.jpg")

请注意,上述代码中的image.jpg是指定图像的路径。您需要将其替换为您自己的图像路径。

cv2.imread()函数是OpenCV库中的一个函数,用于读取图像文件。

语法格式: image = cv2.imread(filename, flags)

参数说明:

  • filename:要读取的图像文件路径,可以是绝对路径或相对路径。
  • flags:读取图像的方式。可选参数,默认值为 cv2.IMREAD_COLOR。常用的取值有:
    • cv2.IMREAD_COLOR:以RGB颜色模式读取图像,忽略透明度通道。
    • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。
    • cv2.IMREAD_UNCHANGED:读取图像的原始模式,包括透明度通道。
python 复制代码
图像读取:
    cv2.imread(img_path,flag)
        img_path:   图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 None
        flag:   cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1
                cv2.IMREAO_GRAYSCALE,按灰度模式读取图像,也可以传入 0
                cv2.IMREAO_UNCHANGEO,读取图像,包括其 alpha通道,也可以传入 -1

返回值:

  • image:读取到的图像数据,以numpy数组的形式返回。

示例代码:

import cv2

# 以RGB颜色模式读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)

# 以灰度模式读取图像
gray_image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 以原始模式读取图像
raw_image = cv2.imread('image.jpg', cv2.IMREAD_UNCHANGED)

二、显示图像

要在OpenCV中显示图像,可以使用cv2.imshow()函数。

python 复制代码
图像显示:
    cv2.imshow(winname,img)
        winname:        窗口名称
        img:            显示的图像

以下是一个示例代码,演示如何显示图像:

python 复制代码
import cv2

# 读取图像
image = cv2.imread('image.jpg')

# 创建窗口并显示图像
cv2.imshow('Image', image)

# 等待用户按下任意键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

**请将上述代码中的image.jpg替换为您要显示的图像的路径和文件名。**该代码将创建一个名为"Image"的窗口,并在该窗口中显示图像。用户需要按下任意键后窗口才会关闭。

imread()函数用于加载图像,需要传入图像的文件路径。然后使用imshow()函数显示图像,在窗口中显示的标题为"Image"。最后使用waitKey(0)等待用户按下任意键,然后使用destroyAllWindows()关闭显示图像的窗口。

注意: cv2.imshow()函数可以显示BGR格式的图像。如果图像的颜色空间是RGB,需要在显示前将其转换为BGR格式。

此外,还可以使用cv2.namedWindow()函数创建一个具有自定义名称的窗口,以及cv2.resizeWindow()函数调整窗口的大小。

三、显示视频流

下面是使用OpenCV库显示视频流的示例代码:

python 复制代码
import cv2
cap = cv2.VideoCapture(0)  # 0表示默认摄像头,如果有多个摄像头可以尝试使用1、2、3...
while True:
    ret, frame = cap.read()  # 读取视频流的一帧
    cv2.imshow('Video', frame)  # 显示当前帧
    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按下q键退出循环
        break
cap.release()  # 释放摄像头
cv2.destroyAllWindows()  # 关闭窗口

这段代码首先创建了一个VideoCapture对象来读取视频流。然后在一个循环中不断读取每一帧,并使用imshow()函数显示当前帧。通过waitKey函数等待用户按下q键来退出循环。最后记得释放摄像头资源和关闭窗口。

较复杂的程序:

python 复制代码
import cv2 as cv

cam = cv.VideoCapture("xin.avi")                    # cam = cv.VideoCapture("D:\音乐剪辑\love 3.mp4")
# cam.set(3,4080),cam.set(4,3060)                   # 来把宽和高改成 4080x3060
while(cam.isOpened()):              # 用于判断 cap是否正常初始化,返回布尔值,正常则返回 True 
    ret,frame = cam.read()                  
    cv.imshow("Video",frame)
    if cv.waitKey(1)==27:           # 等候 1ms,播放下一帧      if cv.waitKey(60)==27:        
        break

cam.release()
cv.destroyAllWindows()

四、相关知识拓展

python 复制代码
"""
    OpenCV 查看图像
    调整图像大小
    图像色彩空间(BGR,HSV)
"""




"""
图像读取:
    cv2.imread(img_path,flag)
        img_path:   图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 None
        flag:   cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1
                cv2.IMREAO_GRAYSCALE,按灰度模式读取图像,也可以传入 0
                cv2.IMREAO_UNCHANGEO,读取图像,包括其 alpha通道,也可以传入 -1

                
图像显示:
    cv2.imshow(winname,img)
        winname:        窗口名称
        img:            显示的图像


图像保存:
    cv2.imwrite(img_path_name,img,num)
        img_path_name:          保存的文件名
        img:                    文件对象
        num(可选):              针对特定的格式
                对于 JPEG,其表示的是图像的质量,用 0~100的整数表示,默认为 95
                对于 PNG,第三个参数表示的是压缩级别,默认为 3


图像性质:
    img.shape   (打印图片的长,宽和颜色通道数;灰度图的颜色通道数为 1,不显示)
    img.size    (打印图片的像素数目)
    img.dtype   (打印图片的格式)


图像缩放:
    cv2.resize(img,dsize,fx,fy,interpolation)
        img                 代表需要缩放的原始图像
        dsize               代表输出图像大小 (长,宽)
        fx,fy               代表水平方向和垂直方向的缩放比例
        interpolation       代表插值方式
            INTER_NEAREST               最邻近插值
            INTER_LINEAR                双线性插值 (默认)
            INTER_AREA                  区域插值
            INTER_CUBIC                 4x4 像素邻域内的双立方插值
            INTER_LANCZOS4              8x8 像素邻域内的Lanczos插值

"""
相关推荐
春末的南方城市18 分钟前
FLUX的ID保持项目也来了! 字节开源PuLID-FLUX-v0.9.0,开启一致性风格写真新纪元!
人工智能·计算机视觉·stable diffusion·aigc·图像生成
jndingxin34 分钟前
OpenCV视频I/O(14)创建和写入视频文件的类:VideoWriter介绍
人工智能·opencv·音视频
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
m0_689618283 小时前
水凝胶发生器,不对称设计妙,医电应用前景广
笔记
Ace'3 小时前
每日一题&&学习笔记
笔记·学习
挥剑决浮云 -3 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
FL16238631294 小时前
[C++]使用纯opencv部署yolov11旋转框目标检测
opencv·yolo·目标检测
新晓·故知4 小时前
<基于递归实现线索二叉树的构造及遍历算法探讨>
数据结构·经验分享·笔记·算法·链表
魔理沙偷走了BUG4 小时前
【数学分析笔记】第4章第4节 复合函数求导法则及其应用(3)
笔记·数学分析