在 C++中,使用 OpenCV 库进行图像读取与显示是一项基础且常见的任务。OpenCV 提供了简单易用的函数来处理这些操作。以下是如何用 C++ 实现图像读取与显示的简介:
1.图像读取
cv::imread 是 OpenCV 中用于读取图像文件的函数。它支持多种图像格式(如 JPEG、PNG、BMP 等),并将图像加载到 cv::Mat 对象中。以下是关于 cv::imread 的详细说明,包括其参数。
filename:类型:std::string;描述:要读取的图像文件的路径。可以是相对路径或绝对路径。
示例:"path/to/image.jpg" 或 "/home/user/images/image.png"
flags:类型:int;描述:指定读取图像的方式。默认值为 cv::IMREAD_COLOR。
常见选项:
IMREAD_COLOR(默认值):以彩色模式读取图像。图像的透明通道(如果有)将被忽略。
IMREAD_GRAYSCALE:以灰度模式读取图像。图像将被转换为单通道灰度图像。
IMREAD_UNCHANGED:以原始格式读取图像,包括透明通道(如果有)。
IMREAD_ANYCOLOR:尝试以彩色模式读取图像,但如果失败,则尝试以灰度模式读取。
IMREAD_ANYDEPTH:尝试以原始深度读取图像(例如,16位或32位图像)。
IMREAD_IGNORE_ORIENTATION:忽略图像的 EXIF 信息,不旋转图像。
cv::Mat image = cv::imread("path/to/your/image.jpg", cv::IMREAD_COLOR);
if (image.empty()) {
std::cerr << "Error: Image cannot be loaded." << std::endl;
return -1;
}
2.图像显示
cv::imshow 是 OpenCV 中用于在窗口中显示图像的函数。它将图像数据渲染到一个窗口中,方便用户查看图像内容。以下是关于 cv::imshow 的详细说明,包括其参数、返回值以及常见用法。
winname类型:const String&;描述:窗口的名称,是一个字符串。如果窗口已经存在,则会更新该窗口的内容;如果窗口不存在,则会创建一个新的窗口。
mat类型:InputArray
描述:要显示的图像数据。InputArray 是一个通用的输入数组类型,可以是 cv::Mat、cv::Mat_<T>或其他兼容的类型。
cv::imshow("Image Window", image); // 在窗口中显示图像
3.图像显示窗口
在 OpenCV 中,cv::namedWindow 函数用于创建一个窗口,用于显示图像或视频帧。该函数的第二个参数是一个标志,用于指定窗口的属性。
WINDOW_AUTOSIZE:窗口大小自动调整为与显示的图像大小一致。
WINDOW_NORMAL:窗口大小可以由用户手动调整。
WINDOW_KEEPRATIO:在调整窗口大小时保持图像的宽高比。
WINDOW_FREERATIO:在调整窗口大小时,图像的宽高比可以自由改变。
WINDOW_GUI_EXPANDED:使用扩展的 GUI 样式,支持更多功能(如滚动条)。
可以通过按位或操作符(|)组合多个标志。
完整示例代码
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取图像
cv::Mat image = cv::imread("path/to/your/image.jpg");
if (image.empty()) {
std::cerr << "Error: Image cannot be loaded." << std::endl;
return -1;
}
// 创建窗口并显示图像
cv::namedWindow("Image Window", cv::WINDOW_AUTOSIZE);
cv::imshow("Image Window", image);
// 等待键盘事件
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
运行结果: