学习OpenCV3 [1]读取图片和视频(c++ python)

写在前面

本文是复现《学习OpenCV3》的代码,同时也是为了学习Python,希望能和各位共同进步

读取图片

c++

#include <opencv2/opencv.hpp> // 包含OpenCV头文件

int main() {
    std::string path = "D:/Opencv/adrian.jpg"; // 图像文件路径

    cv::Mat img = cv::imread(path); // 读取图像

    if (img.empty()) { // 判断图像是否为空
        return -1; // 图像为空时返回-1
    } else {
        cv::namedWindow("Img", cv::WINDOW_AUTOSIZE); // 创建一个自动调整大小的窗口
        cv::imshow("Img", img); // 显示图像

        cv::waitKey(0); // 等待用户按下任意键后关闭窗口
        cv::destroyWindow("Img"); // 关闭窗口
    }

    return 0; // 返回0表示程序成功执行
}

Python

import cv2  # 导入OpenCV库

# 图像文件路径
sImaPath = "D:/Opencv/adrian.jpg"

# 读取图像
src = cv2.imread(sImaPath)

# 判断图像是否为空
if src is None or src.size == 0:
    print("图像为空")
else:
    # 创建一个可调整大小的窗口并显示图像
    cv2.namedWindow("Img", cv2.WINDOW_NORMAL)
    cv2.imshow("Img", src)

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

    # 关闭窗口
    cv2.destroyWindow("Img")

重要函数


imread()

参数说明:
filename: 要读取的图像文件的路径。
flags(可选参数): 指定图像的读取方式。它是一个整数,可以使用以下标志来设置读取方式:
	cv2.IMREAD_COLOR(默认值):加载彩色图像。如果文件是一个带有Alpha通道的PNG图像,忽略Alpha通道。
	cv2.IMREAD_GRAYSCALE:加载灰度图像。
	cv2.IMREAD_UNCHANGED:加载图像,并保留Alpha通道(如果有的话)。

返回值:
如果图像成功读取,则返回一个numpy数组(ndarray),表示图像的像素值。如果读取失败,返回None。

namedWindow()

参数说明:

winname: 窗口的名称。这是一个字符串,用于标识窗口。每个窗口都应该有一个唯一的名称。
flags(可选参数): 窗口的属性标志。它是一个整数,可以使用以下标志来设置窗口属性:
	cv2.WINDOW_NORMAL:允许用户调整窗口大小。
	cv2.WINDOW_AUTOSIZE(默认值):窗口大小自动调整以适应图像大小。


imshow()
参数说明:

winname: 窗口的名称。这应该是先前使用cv2.namedWindow创建的窗口的名称。
mat: 要显示的图像数据,通常是一个numpy数组(ndarray)。

destoryWindow()
参数说明:

winname: 要关闭的窗口的名称。这应该是先前使用cv2.namedWindow创建的窗口的名称。

读取视频

c++

#include <opencv2/opencv.hpp>  // 导入OpenCV头文件

int main()
{
    std::string path = "D:/Opencv/test.avi";  // 视频文件路径

    cv::VideoCapture cap(path);  // 创建视频捕获对象并打开视频文件
    if (!cap.isOpened()) {  // 检查是否成功打开视频文件
        std::cerr << "Error opening video file." << std::endl;
        return -1;  // 返回-1表示打开失败
    }

    cv::namedWindow("video", cv::WINDOW_NORMAL);  // 创建一个窗口用于显示视频帧

    cv::Mat frame;  // 存储每一帧的图像
    while (cap.read(frame)) {  // 读取视频帧直到视频结束
        cv::imshow("video", frame);  // 在窗口中显示当前帧

        if (cv::waitKey(33) >= 0)  // 等待33毫秒,如果用户按下键盘按键则退出循环
            break;
    }

    return 0;  // 返回0表示程序成功执行
}

Python

import cv2 as cv  # 导入OpenCV库并使用cv作为别名


def main():
    path = "D:/Opencv/test.avi"  # 视频文件路径

    cap = cv.VideoCapture(path)  # 创建视频捕获对象并打开视频文件

    if not cap.isOpened():  # 检查是否成功打开视频文件
        print("Error opening video file.")
        return -1

    cv.namedWindow("video", cv.WINDOW_NORMAL)  # 创建一个可调整大小的窗口用于显示视频帧

    while True:  # 无限循环,读取并显示视频帧
        ret, frame = cap.read()  # 读取视频帧

        if not ret:  # 如果未能读取帧则退出循环,视频结束
            break

        cv.imshow("video", frame)  # 在窗口中显示当前帧

        if cv.waitKey(33) >= 0:  # 等待33毫秒,如果用户按下键盘按键则退出循环
            break

    cap.release()  # 释放视频捕获对象
    cv.destroyAllWindows()  # 关闭窗口


if __name__ == "__main__":
    main()  # 执行主函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值