一、获取图像

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

  1. 导入必要的库:import cv2

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

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:读取图像的原始模式,包括透明度通道。
图像读取:
    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()函数。

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

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

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库显示视频流的示例代码:

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键来退出循环。最后记得释放摄像头资源和关闭窗口。

较复杂的程序:

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()

 四、相关知识拓展

"""
    OpenCV 查看图像
    调整图像大小
    图像色彩空间(BGR,HSV)
"""



"""
二值图:   每个像素取值 0或1,图像显示出来只有黑白色;     黑色:0      白色:1
灰度图:   每个像素8位表示(0~255)单通道显示亮度;     黑色:0     白色:255
彩色图:   每个像素有RGB三个通道分量表示,每个分量0~255,每个通道单拿出来都是一张灰度图;   黑色(0,0,0)     白色(255,255,255)
RGB:        R:红色              G:绿色                  B:蓝色
Image(BGR),Merge(RGB):  三个图层的顺序不同,由上到下
HSV:        H:色相              S:饱和度                V:明度

OpenCV的 HSV格式中, H(色彩/色度)的取值范围是 [0,180], S(饱和度)的取值范围 [0,255], V(亮度)取值范围 [0,255]

"""



"""
图像读取:
    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插值


图像色彩空间转换:
    cv2.cvtColor(img,code)
        img:        要更改其色彩空间的图像
        code:       色彩空间转换的代码
            cv2.COLOR_BGR2GRAY:         表示从 BGR转换为灰度图像
            cv2.COLOR_BGR2HSV:          表示从 BGR转换为 HSV图像


图层(通道)分离:
    cv2.split(img)
        img:        要分离的图像


图层(通道)合并:
    cv2.merge((a,b,c))
        a,b,c:      要合并的色彩通道

"""
03-11 08:37