上一个教程: 使用 CUDA 为 Tegra 构建 OpenCV
下一个教程: 为 OpenCV 编写文档
| |
| 原始作者 | Ana Huamán |
| 兼容性 | OpenCV >= 3.4.4 |
- 警告
- 本教程可能包含过时的信息。
目标
在本教程中,您将学习如何
源代码
C++
- 可下载代码:点击 这里
- 代码速览
#include <iostream>
{
std::string image_path = samples::findFile("starry_night.jpg");
Mat img = imread(image_path, IMREAD_COLOR);
{
std::cout << "无法读取图像: " << image_path << std::endl;
return 1;
}
imshow("显示窗口", img);
int k = waitKey(0);
if(k == 's')
{
imwrite("starry_night.png", img);
}
return 0;
}
cv::getTickFrequency
double getTickFrequency()
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
Python
- 可下载代码:点击 这里
- 代码速览
import cv2 as cv
import sys
if img is None
sys.exit("无法读取图像。")
if k == ord("s")
cv::String findFile(const cv::String &relative_path, bool required=true, bool silentMode=false)
尝试查找请求的数据文件。
void imshow(const String &winname, InputArray mat)
在指定窗口中显示图像。
int waitKey(int delay=0)
等待按键按下。
CV_EXPORTS_W bool imwrite(const String &filename, InputArray img, const std::vector< int > ¶ms=std::vector< int >())
将图像保存到指定文件。
CV_EXPORTS_W Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
从文件加载图像。
解释
C++
在 OpenCV 3 中,我们有多个模块。每个模块负责图像处理的不同领域或方法。您已经可以在这些教程的用户指南的结构中观察到这一点。在使用任何模块之前,您首先需要包含声明每个模块内容的头文件。
您几乎总是会用到
我们还包括 iostream 以方便控制台行输出和输入。
通过声明 using namespace cv;,在下面的代码中,可以访问库函数,而无需显式声明命名空间。
Python
第一步是导入 OpenCV python 库。 正确的方法是另外将其分配给名称 cv,以下代码将使用此名称来引用该库。
import cv2 as cv
import sys
现在,让我们分析主要代码。 第一步,我们从 OpenCV 示例中读取图像“starry_night.jpg”。 为此,调用 cv::imread 函数使用第一个参数指定的文件路径加载图像。 第二个参数是可选的,指定我们想要的图像格式。 这可能是
- IMREAD_COLOR 以 BGR 8 位格式加载图像。 这是此处使用的默认设置。
- IMREAD_UNCHANGED 按原样加载图像 (包括 alpha 通道,如果存在)
- IMREAD_GRAYSCALE 将图像加载为灰度图像
读取后,图像数据将存储在 cv::Mat 对象中。
C++
std::string image_path = samples::findFile("starry_night.jpg");
Python
- 注意
- OpenCV 支持 Windows 位图 (bmp)、可移植图像格式 (pbm、pgm、ppm) 和 Sun 光栅 (sr, ras) 图像格式。 在插件的帮助下 (如果您自己构建库,则需要指定使用它们,但在我们默认提供的软件包中),您还可以加载 JPEG (jpeg、jpg、jpe)、JPEG 2000 (jp2 - 在 CMake 中命名为 Jasper)、TIFF 文件 (tiff, tif) 和可移植网络图形 (png) 等图像格式。 此外,OpenEXR 也是一种可能性。
之后,将执行检查,以查看图像是否已正确加载。
C++
{
std::cout << "无法读取图像: " << image_path << std::endl;
return 1;
}
Python
if img is None
sys.exit("无法读取图像。")
然后,使用调用 cv::imshow 函数显示图像。 第一个参数是窗口的标题,第二个参数是要显示的 cv::Mat 对象。
因为我们希望我们的窗口一直显示,直到用户按下按键 (否则程序会过早结束),所以我们使用 cv::waitKey 函数,该函数的唯一参数就是它应该等待用户输入的时间 (以毫秒为单位)。 零表示永远等待。 返回值是按下的键。
C++
Python
最后,如果按下的键是“s”键,则将图像写入文件。 为此,调用 cv::imwrite 函数,该函数具有文件路径和 cv::Mat 对象作为参数。
C++
Python