当前位置:首页 > 科技  > 软件

用Rust和OpenCV打造ASCII图片

来源: 责编: 时间:2024-05-29 17:32:31 227观看
导读使用Rust和OpenCV的动态组合,将任何旧图片变成一个炙手可热的ASCII艺术图片。想象文字像像素一样跳舞,在纯文本的基础上捕捉图像的本质。图片OpenCV下载地址:https://opencv.org/releases/.创建一个Rust项目:cargo new im

使用Rust和OpenCV的动态组合,将任何旧图片变成一个炙手可热的ASCII艺术图片。想象文字像像素一样跳舞,在纯文本的基础上捕捉图像的本质。QW528资讯网——每日最新资讯28at.com

图片图片QW528资讯网——每日最新资讯28at.com

OpenCV下载地址:https://opencv.org/releases/.QW528资讯网——每日最新资讯28at.com

创建一个Rust项目:QW528资讯网——每日最新资讯28at.com

cargo new img-to-ascii

QW528资讯网——每日最新资讯28at.com

在Cargo.toml文件中,加入以下依赖项:QW528资讯网——每日最新资讯28at.com

[dependencies]opencv = "0.88.5"

QW528资讯网——每日最新资讯28at.com

将下面的图片存储在项目的根目录下:QW528资讯网——每日最新资讯28at.com

图片图片QW528资讯网——每日最新资讯28at.com

第一步,读取图片,然后灰度化QW528资讯网——每日最新资讯28at.com

use opencv::core;use opencv::imgcodecs;use opencv::imgproc;use opencv::prelude::*;use std::env;use std::fs::File;use std::io::Write;fn main() {    // 解析命令行参数    let args: Vec<String> = env::args().collect();    if args.len() < 2 {        println!("Usage: {} <image>", args[0]);        return;    }    // 读取图像文件    let image = imgcodecs::imread(args[1].as_str(), imgcodecs::IMREAD_COLOR).unwrap();    // 转换为灰度    let mut gray_image = Mat::default();    imgproc::cvt_color(&image, &mut gray_image, imgproc::COLOR_BGR2GRAY, 0).unwrap();}

QW528资讯网——每日最新资讯28at.com

这段代码使用OpenCV读取图像并将其转换为灰度,为我们的ASCII艺术创作奠定了基础。QW528资讯网——每日最新资讯28at.com

第二步,缩放和调整大小。QW528资讯网——每日最新资讯28at.com

use opencv::core;use opencv::imgcodecs;use opencv::imgproc;use opencv::prelude::*;use std::env;use std::fs::File;use std::io::Write;fn main() {    ......    // 设置所需宽度或高度    let desired_width = 150;    let desired_height = 150;    // 在保持长宽比的同时计算比例因子    let scale_w = desired_width as f64 / image.cols() as f64;    let scale_h = desired_height as f64 / image.rows() as f64;    let scale = scale_w.min(scale_h);    let new_width = (image.cols() as f64 * scale) as i32;    let new_height = (image.rows() as f64 * scale) as i32;    // 调整图像大小    let mut resized = Mat::default();    imgproc::resize(        &gray_image,        &mut resized,        core::Size::new(new_width, new_height),        0.0,        0.0,        imgproc::INTER_LINEAR,    )    .unwrap();}

QW528资讯网——每日最新资讯28at.com

在这里,我们要确保我们的ASCII图片不会太压扁或拉伸,通过代码计算最佳比例因子并相应地调整图像的大小。QW528资讯网——每日最新资讯28at.com

第三步,ASCII转换。QW528资讯网——每日最新资讯28at.com

use opencv::core;use opencv::imgcodecs;use opencv::imgproc;use opencv::prelude::*;use std::env;use std::fs::File;use std::io::Write;fn main() {    ......    // ASCII转换    // 更多的字符表示更精细的细节    // <$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft///|()1{}[]?-_+~<>i!lI;:,/"^`'. >    let ascii_chars = " .,:;i1tfLCG08@";    let mut ascii_art = String::new();    for i in 0..resized.rows() {        for j in 0..resized.cols() {            let pixel = resized.at_2d::<u8>(i, j).unwrap();            let ascii_index = *pixel as usize * ascii_chars.len() / 256;            ascii_art.push(ascii_chars.chars().nth(ascii_index).unwrap_or(' '));        }        ascii_art.push('/n');    }}

QW528资讯网——每日最新资讯28at.com

我们定义了一个ASCII字符的调色板,并将每个像素的强度映射到一个字符,从而创建了基于文本的图像。QW528资讯网——每日最新资讯28at.com

第四步,生成ASCII图片。QW528资讯网——每日最新资讯28at.com

use opencv::core;use opencv::imgcodecs;use opencv::imgproc;use opencv::prelude::*;use std::env;use std::fs::File;use std::io::Write;fn main() {    ......    // 保存ASCII图像文件    let mut file = File::create(format!(        "{}.txt",        args[1].split('.').collect::<Vec<&str>>()[0]    ))    .unwrap();    file.write_all(ascii_art.as_bytes()).unwrap();    // 打印ASCII图像到控制台    println!("{}", ascii_art);    println!("Done!");}

QW528资讯网——每日最新资讯28at.com

执行以下命令运行程序:QW528资讯网——每日最新资讯28at.com

cargo run R.png

QW528资讯网——每日最新资讯28at.com

最后,呈现了我们的ASCII美术作品,既将其保存为文本文件以供分享,也将其直接打印到控制台以获得即时满足感。QW528资讯网——每日最新资讯28at.com

QW528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-91534-0.html用Rust和OpenCV打造ASCII图片

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Spring 中如何控制 Bean 的加载顺序?

下一篇: 打造高可用系统:深入了解心跳检测机制

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
Top