imread 读取图像
opencv::imgcodecs::imread
在文件中加载一个图像
支持读取的格式
- Windows bitmaps - *.bmp, *.dib (always supported)
- JPEG files - *.jpeg, *.jpg, *.jpe (see the Notesection)
- JPEG 2000 files - *.jp2 (see the Notesection)
- Portable Network Graphics - *.png (see the Notesection)
- WebP - *.webp (see the Notesection)
- Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
- PFM files - *.pfm (see the Notesection)
- Sun rasters - *.sr, *.ras (always supported)
- TIFF files - *.tiff, *.tif (see the Notesection)
- OpenEXR Image files - *.exr (see the Notesection)
- Radiance HDR - *.hdr, *.pic (always supported)
- Raster and Vector geospatial data supported by GDAL (see the Note section)
pub fn imread(filename: &str, flags: i32) -> Result<Mat>
filename:文件位置、名称
flags:
IMREAD_ANYCOLOR: 以任何可能的颜色格式读取图像。
IMREAD_ANYDEPTH:在输入具有相应深度时返回 16 位/32 位图像,否则将其转换为 8 位。
IMREAD_COLOR:始终将图像转换为 3 通道 BGR 彩色图像。
IMREAD_GRAYSCALE:始终将图像转换为单通道灰度图像(编解码器内部转换)。
IMREAD_IGNORE_ORIENTATION:不要根据 EXIF 的方向标志旋转图像。
IMREAD_LOAD_GDAL:使用 gdal 驱动程序加载图像。
IMREAD_REDUCED_COLOR_2:始终将图像转换为 3 通道 BGR 彩色图像,并且图像尺寸减小 1/2。
IMREAD_REDUCED_COLOR_4:始终将图像转换为 3 通道 BGR 彩色图像,并且图像尺寸减小 1/4。
IMREAD_REDUCED_COLOR_8:始终将图像转换为 3 通道 BGR 彩色图像,并且图像尺寸减小 1/8。
IMREAD_REDUCED_GRAYSCALE_2:始终将图像转换为单通道灰度图像,并且图像尺寸减小 1/2。
IMREAD_REDUCED_GRAYSCALE_4:始终将图像转换为单通道灰度图像,图像尺寸缩小 1/4。
IMREAD_REDUCED_GRAYSCALE_8:始终将图像转换为单通道灰度图像,图像尺寸缩小 1/8。
IMREAD_UNCHANGED:按原样返回加载的图像(使用 alpha 通道,否则会被裁剪)。忽略 EXIF 方向。
named_window 创建一个窗体
pub fn named_window(winname: &str, flags: i32) -> Result<()>
winname:窗体名称
flags:
WINDOW_AUTOSIZE:用户无法调整窗口大小,大小受显示图像的限制。
WINDOW_FREERATIO:图像尽可能多地消耗(无比例限制)。
WINDOW_FULLSCREEN:将窗口更改为全屏。
WINDOW_GUI_EXPANDED:状态栏和工具栏
WINDOW_GUI_NORMAL:可以改变大小
WINDOW_KEEPRATIO:图像的比例
WINDOW_NORMAL:用户可以调整窗口大小(无约束)/也用于将全屏窗口切换到正常大小。
WINDOW_OPENGL:支持opengl的窗口。
WND_PROP_ASPECT_RATIO:窗口的纵横比(可以设置为 WINDOW_FREERATIO 或 WINDOW_KEEPRATIO)。
WND_PROP_AUTOSIZE: autosize 属性(可以是 WINDOW_NORMAL 或 WINDOW_AUTOSIZE)。
WND_PROP_FULLSCREEN:全屏属性(可以是 WINDOW_NORMAL 或 WINDOW_FULLSCREEN)。
WND_PROP_OPENGL:opengl 支持。
WND_PROP_TOPMOST:用于切换普通窗口是否处于最顶层的属性
WND_PROP_VISIBLE:检查窗口是否存在且可见
WND_PROP_VSYNC:启用或禁用 VSYNC(在 OpenGL 模式下)
imshow 显示窗体
pub fn imshow(winname: &str, mat: &dyn ToInputArray) -> Result<()>
winname:窗体名称
mat:图像
\
wiat_key 等待按键
pub fn wait_key(delay: i32) -> Result<i32>
destroy_all_windows 摧毁所有窗体
pub fn destroy_all_windows() -> Result<()>
\
下面我们实现使用opencv读取图片
创建rust项目
cargo new opencv_read_save
首先要确保你的电脑已经配置了opencv,如果没有的话可以看前面的文章对opencv进行配置
创建项目需要把opencv的dll拷贝到目录 target/debug或者是target/release
opencv\build\x64\vc14\bin\opencv_world440.dll
可能你的dll文件名称和我的版本不一样,但是这并不影响下面的教程。
把dll拷贝到项目路径
然后运行程序,因为现在还没有编写任何代码,将会输出hello world
cargo run
接下来我们介绍即将使用到的函数
imread:读取图像
named_window 创建窗体
imshow ****显示图像
wait_key 等待按键
destroy_all_windows 销毁窗体
如果想要获取图像的信息需要引入:opencv::prelude::*;
\
代码的编写
1、因为是通过opencv的窗体显示,所以需要创建一个窗体
let _ = named_window("window", opencv::highgui::WINDOW_AUTOSIZE);
2、通过imread读取图像(读取我最开始使用绝对地址,始终读取不到图像,后台我改成相对地址,把图片放到项目目录下,才可以读取出图像。)
let image = imread("2.png", opencv::imgcodecs::IMREAD_COLOR).unwrap();
3、使用imshow函数将图像显示到创建的窗体上面
imshow("window", &image).unwrap();
4、使用wait_key函数等待用户输入按键,暂停程序
let _ = wait_key(0);
5、停止程序销毁所有窗体
let _ = destroy_all_windows();
运行程序
\
完整代码
use opencv::highgui::{
//显示窗口
imshow,
//创建命名窗口
named_window,
//摧毁所有窗口
destroy_all_windows,
//等待用户输入
wait_key
};
use opencv::imgcodecs::imread;
fn main() {
//创建窗体 window
let _ = named_window("window", opencv::highgui::WINDOW_NORMAL);
//读取图片
let image = imread("2.png", opencv::imgcodecs::IMREAD_COLOR).unwrap();
//显示读取到的图片
imshow("window", &image).unwrap();
//等待用户输入,不然窗口就会立刻关闭
let _ = wait_key(0);
//销毁所有窗体
let _ = destroy_all_windows();
}
后续更新.....