image - 如何从 Rust 中的 camera_capture 灰度图像
问题描述
这里的 Rust 是全新的。我正在尝试从 camera_capture lib(它基于 rscam)中获取相机图像。当我尝试做
grayscale(&frame)
它显示了这样的错误:
error[E0277]: the trait bound `camera_capture::Frame: DerefMut` is not satisfied
--> src/main.rs:22:31
|
22 | let frame = grayscale(&frame);
| ^^^^^^ the trait `DerefMut` is not implemented for `camera_capture::Frame`
|
= note: required because of the requirements on the impl of `GenericImage` for `ImageBuffer<Rgb<u8>, camera_capture::Frame>`
这是完整的代码:
extern crate camera_capture;
extern crate ncurses;
extern crate image;
use image::imageops::resize;
use image::imageops::colorops::grayscale;
use image::FilterType;
use image::load_from_memory;
const ASCII_GREYSCALE: &str = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'.";
fn main() {
let cam = camera_capture::create(0).unwrap();
let mut cam = cam.fps(30.0).unwrap().start().unwrap();
let window = ncurses::initscr();
let mut x: i32 = 0;
let mut y: i32 = 0;
ncurses::getmaxyx(window, &mut y, &mut x);
for frame in cam {
let frame = grayscale(&frame);
let frame = resize(&frame, x as u32, y as u32, FilterType::Nearest);
for (i, pixel) in frame.enumerate_pixels().enumerate() {
let dupa = pixel.2.data;
let value = (ASCII_GREYSCALE.len() - 1) * dupa[0] as usize/255 + 1;
let put_y = (i as i32+1)/x;
let put_x = i as i32 % x;
let ch = ASCII_GREYSCALE.chars().rev().nth(value).unwrap() as u32;
ncurses::mvaddch(put_y, put_x, ch);
}
ncurses::refresh();
}
}
有人知道如何将其转换为灰度吗?也许其他一些图书馆?
解决方案
好的,我找到了解决方案。可以将其转换为普通 image::DynamicImage 子类型:
let frame = RgbImage::from_raw(frame.width(), frame.height(), frame.to_vec()).unwrap();
然后可以:
grayscale(&frame)
推荐阅读
- java - 覆盖类层次结构中另一个类最终确定的方法
- linq - 我如何联合int?和 linqpad 中的 int 变量
- python - 在解析时转义错误的 XML
- javascript - 禁用移动网站上方的 adsense 广告(博主)
- octobercms - 十月 CMS 关系字段返回空数据
- python - Python tkinter 按钮不会低于标签
- apache - 在 SOLR 中的查询期间忽略特殊字符
- java - 先下载视频,再用 ExoPlayer 播放
- c# - c# FileSystemWatcher Created 事件未针对创建的所有文件触发
- c# - C#模数方程返回错误值