首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

image-rs-Rust下的图像处理库

本期的每周一库带来的是Rust下的图像处理库,image-rs。

Github: image-rs repo

Docs rs: image-rs doc

根据Github仓库页面的介绍,image-rs提供了基础的图像处理功能和图像格式转换功能。

所有的图像处理函数都通过GenericImage和ImageBuffer完成。

image-rs支持的图像格式如下:

从上图我们可以看出image-rs基本支持了应用中常见的图像容器格式类型。

关于ImageDecoder和ImageDecoderExt

所有的图像格式decoders都包含了ImageDecoder实现,其中主要过程是从图像文件中获取图像的metadata并解码图像。

其中一些decoders的比较重要的参数包括:

dimensions:返回包含图像的宽度和高度的元组数据

color_type:返回由decoder返回的图像的色彩类型

read_image:把图像解码成bytes

关于像素,image提供了如下几种像素类型:

Rgb: 包含Rgb像素

Rgba: 包含Rgba像素(a为alpha,透明通道)

Luma: 灰度像素

LumaA: 包含alpha通道的灰度像素

图像处理函数包含:

blur:使用高斯模糊来处理图像

brighten:图像高亮处理

huerotate: 旋转色彩空间

contrast: 调整图像的对比度

crop: 剪裁图像

filter3x3:使用3x3的矩阵来处理图像,可用于图像降噪,升噪

grayscale: 灰度化图像

flip_horizontal: 水平翻转图像

flip_vertical: 垂直翻转图像

invert: 对图像的每个像素求反

resize: 改变图像尺寸

rotate180: 图像顺时针旋转180度

rotate270: 图像顺时针旋转270度

rotate90: 图像顺时针

unsharpen: 降低图像锐度

下面我们通过image-rs Github仓库的Generating Fractals例子来试用image-rs库

开发环境:

Windows 10

cargo --version: 1.39.0

rustc --version: 1.39.0

根据示例代码,只需要在dependencies中添加引用

[dependencies]image = "0.23.4"num-complex = "0.2.4"

修改源文件main.rs如下

extern crate image;extern crate num_complex;

fn main() { let imgx = 800; let imgy = 800;

let scalex = 3.0 / imgx as f32; let scaley = 3.0 / imgy as f32;

// Create a new ImgBuf with width: imgx and height: imgy let mut imgbuf = image::ImageBuffer::new(imgx, imgy);

// Iterate over the coordinates and pixels of the image for (x, y, pixel) in imgbuf.enumerate_pixels_mut() { let r = (0.3 * x as f32) as u8; let b = (0.3 * y as f32) as u8; *pixel = image::Rgb([r, 0, b]); }

// A redundant loop to demonstrate reading image data for x in 0..imgx { for y in 0..imgy { let cx = y as f32 * scalex - 1.5; let cy = x as f32 * scaley - 1.5;

let c = num_complex::Complex::new(-0.4, 0.6); let mut z = num_complex::Complex::new(cx, cy);

let mut i = 0; while i < 255 && z.norm() z = z * z + c; i += 1; }

let pixel = imgbuf.get_pixel_mut(x, y); let image::Rgb(data) = *pixel; *pixel = image::Rgb([data[0], i as u8, data[2]]); } }

// Save the image as “fractal.png”, the format is deduced from the path imgbuf.save("fractal.png").unwrap();}

使用命令cargo build编译,使用命令cargo run运行,即可在工程根目录下生成名为fractal.png的图片

以上就是本期每周一库的内容

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200424A0U7LN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券