【问题标题】:How to convert a picture in pure black and white in Rust如何在 Rust 中将图片转换为纯黑白
【发布时间】:2019-07-17 10:23:26
【问题描述】:

我想使用Image crate 将图片转换为纯黑白(例如无灰度),结果应该是具有 0 和 255 RGB 值的图片。

docs 之后,我写了以下内容:

let img = image::open("photo.jpg").unwrap(); // Load picture
let gray_img = img.grayscale(); // Convert it

// Access a random pixel value
let px = gray_img.get_pixel(0,0);
println!("{:?}", pixel.data); // Print RGB array

这里的问题是,无论我打印什么像素,它都会给我灰度值。 那么,有没有将图像转换为纯黑白的功能?类似于Pillow 的 Python 转换函数?

【问题讨论】:

  • 你不想 dither 到 BiLevel 地图吗?
  • 是的,这就是我要找的……但是官方文档并没有说太多关于抖动的内容……你能详细说明一下答案吗?
  • 是的,我想我可以给你看

标签: image-processing rust


【解决方案1】:

这是您如何首先构建灰度图像然后将其抖动为黑白图像的方法:

use image::{self, imageops::*};

let img = image::open("cat.jpeg").unwrap();
let mut img = img.grayscale();
let mut img = img.as_mut_luma8().unwrap();
dither(&mut img, &BiLevel);
img.save("cat.png").unwrap(); // this step is optional but convenient for testing

你当然应该正确处理错误,而不是只做unwrap

【讨论】:

  • 有人可能应该用更多像这样的例子来改进 crate 的文档。不阅读源代码并不明显。
  • 感谢您的帮助...但是我不完全理解应该如何实现BiLevel(所以ColorMap)。
  • 实施是什么意思?您不必实施它。你的意思是你想要另一个抖动算法?这是the implementation of BiLevel
  • 没关系,我还没有从 image::imageops::colorps 模块导入 BiLevel,所以编译器给了我一个错误...现在一切正常!
  • @bzoark 抱歉,我会在我的答案中添加使用语句(不要直接从 colorops 导入:它在 imageops 中重新导出)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2012-10-20
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多