Как получить вектор значений RGB u8 при использовании ящика с изображениями? - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно взять изображение и получить список значений байтов RGB.Я использую ящик с изображениями .Вот что у меня есть:

extern crate image;

fn main() {
    let im = image::open("wall.jpg").unwrap().to_rgb();
    let data: Vec<[u8; 3]> = im.pixels().flat_map(|p| vec![p.data]).collect();
    let rgb: Vec<&u8> = data.iter().flat_map(|p| p.iter()).collect();
    println!("First Pixel: {} {} {}", rgb[0], rgb[1], rgb[2]);
}

Это кажется довольно уродливым.Мне нужно ввести промежуточную переменную, и я получаю вектор указателей на значения, которые мне действительно нужны, поэтому, прежде чем я смогу сделать что-то еще, мне придется сопоставить ее снова, чтобы получить действительные значения.

ВсеЯ хочу это вектор u8.Как мне это получить?

1 Ответ

0 голосов
/ 12 июня 2018

Что ж, если вам нужны только необработанные данные, вы можете просто позвонить DynamicImage::raw_pixels:

let im = image::open("wall.jpg").unwrap().to_rbg();
let rgb: Vec<u8> = im.raw_pixels();

Если все, что вас на самом деле интересует, это первый пиксель, хотяЯ бы порекомендовал позвонить GenericImage::get_pixel:

let im = image::open("wall.jpg").unwrap();
let first_pixel = im.get_pixel(0, 0);

, который затем можно превратить в массив [u8; 3] данных RGB:

let rgb = first_pixel.to_rbg();
println!("First Pixel: {} {} {}", rgb.data[0], rgb.data[1], rgb.data[2]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...