翻译自OpenCV Tutorials,原地址在这里。
目标
- 加载一张图片(使用 imread)
- 创建一个已命名的OpenCV窗口(使用nameWindow)
- 在OpenCV窗口中显示图片(使用imshow)
源码
|
|
解释
- core部分,这里定义了这个库的基础内容。
- highgui模块,这里包含了输入输出操作函数。
<pre style="overflow-x: auto; overflow-y: hidden; padding: 5px; color: rgb(51, 51, 51); line-height: 15.6000003814697px; border-top-width: 1px; border-bottom-width: 1px; border-style: solid none; border-top-color: rgb(170, 204, 238); border-bottom-color: rgb(170, 204, 238); background-color: rgb(224, 245, 255);"><span class="cp" style="color: rgb(0, 112, 32);">#include <opencv2/core/core.hpp></span>
<span class="cp" style="color: rgb(0, 112, 32);">#include <opencv2/highgui/highgui.hpp></span>
<span class="cp" style="color: rgb(0, 112, 32);">#include <iostream></span>
<pre style="overflow-x: auto; overflow-y: hidden; padding: 5px; color: rgb(51, 51, 51); line-height: 15.6000003814697px; border-top-width: 1px; border-bottom-width: 1px; border-style: solid none; border-top-color: rgb(170, 204, 238); border-bottom-color: rgb(170, 204, 238); background-color: rgb(224, 245, 255);"><span class="k" style="color: rgb(0, 112, 32); font-weight: bold;">using</span> <span class="k" style="color: rgb(0, 112, 32); font-weight: bold;">namespace</span> <span class="n">cv</span><span class="p">;</span>
<span class="k" style="color: rgb(0, 112, 32); font-weight: bold;">using</span> <span class="k" style="color: rgb(0, 112, 32); font-weight: bold;">namespace</span> <span class="n">std</span><span class="p">;</span>
这对STL库同样正确(用来控制输入输出)。现在,让我们分析main函数。我们初步假设我们从命令行得到了可以使用的名称参数。
<pre style="overflow-x: auto; overflow-y: hidden; padding: 5px; color: rgb(51, 51, 51); line-height: 15.6000003814697px; border-top-width: 1px; border-bottom-width: 1px; border-style: solid none; border-top-color: rgb(170, 204, 238); border-bottom-color: rgb(170, 204, 238); background-color: rgb(224, 245, 255);"> <span class="k" style="color: rgb(0, 112, 32); font-weight: bold;">if</span><span class="p">(</span> <span class="n">argc</span> <span class="o" style="color: rgb(102, 102, 102);">!=</span> <span class="mi" style="color: rgb(32, 128, 80);">2</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">cout</span> <span class="o" style="color: rgb(102, 102, 102);"><<</span><span class="s" style="color: rgb(64, 112, 160);">" Usage: display_image ImageToLoadAndDisplay"</span> <span class="o" style="color: rgb(102, 102, 102);"><<</span> <span class="n">endl</span><span class="p">;</span>
<span class="k" style="color: rgb(0, 112, 32); font-weight: bold;">return</span> <span class="o" style="color: rgb(102, 102, 102);">-</span><span class="mi" style="color: rgb(32, 128, 80);">1</span><span class="p">;</span>
<span class="p">}</span>
然后创建一个Mat对象去存储被加载图片的数据。
Mat image;
- CV_LOAD_IMAGE_UNCHANGED(<0)按照图片本身的样子加载图片(如果alpha通道存在的话,包括alpha通道)
- CV_LAOD_IMAGE_GRAYSCALE(0)仅加载图片的一个通道(loads the image as an intensity one,加载灰度图)
- CV_LOAD_IMAGE_COLOR (>0) 使用RGB格式加载图片
注: OpenCV提供支持的图片格式有Windows bitmap (bmp), portable image formats (pbm, pgm, ppm)和Sun raster (sr, ras). 在插件的帮助下 (you need to specify to use them if you build yourself the library, nevertheless in the packages we ship present by default) 你也可以加载以下格式图片,如:JPEG (jpeg, jpg, jpe), JPEG 2000 (jp2 - codenamed in the CMake as Jasper), TIFF files (tiff, tif)以及portable network graphics (png). 除此之外, OpenEXR也是支持的.
检查图像数据被正确加载之后,我们希望去展示我们的图片,所以我们使用nameWindow函数创建一个OpenCV窗口。这些将被OpenCV自动管理只要你创建他们。你需要给指定他们的名字和他们如何处理图像的尺寸变化(For this you need to specify its name and how it should handle the change of the image it contains from a size point of view.)它可以是:
- WINDOW_AUTOSIZE是除Qt平台之外唯一被支持的参数。它将按照图片的尺寸显示。并不允许调节尺寸。
- WINDOW_NORMAL允许你在Qt平台调节尺寸。图片将依据窗口尺寸自动调节。如果你想保持图片比例,你可以使用 | 操作符(WINDOW_KEEPRATIO) 或 自由比例(WINDOW_FREERATIO)。
结果
- 编译你的代码给出一个图片路径作为参数并执行。如果你是在Windows执行将有一个exe拓展名。当然假设你的图片文件也在你的项目文件。
- 你将得到一个很棒的窗口,正如下面展示的。