成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Rust和OpenCV打造ASCII圖片

開發 前端
?使用Rust和OpenCV的動態組合,將任何舊圖片變成一個炙手可熱的ASCII藝術圖片。想象文字像像素一樣跳舞,在純文本的基礎上捕捉圖像的本質。

使用Rust和OpenCV的動態組合,將任何舊圖片變成一個炙手可熱的ASCII藝術圖片。想象文字像像素一樣跳舞,在純文本的基礎上捕捉圖像的本質。

圖片圖片

OpenCV下載地址:https://opencv.org/releases/.

創建一個Rust項目:

cargo new img-to-ascii

在Cargo.toml文件中,加入以下依賴項:

[dependencies]
opencv = "0.88.5"

將下面的圖片存儲在項目的根目錄下:

圖片圖片

第一步,讀取圖片,然后灰度化

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();
}

這段代碼使用OpenCV讀取圖像并將其轉換為灰度,為我們的ASCII藝術創作奠定了基礎。

第二步,縮放和調整大小。

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();
}

在這里,我們要確保我們的ASCII圖片不會太壓扁或拉伸,通過代碼計算最佳比例因子并相應地調整圖像的大小。

第三步,ASCII轉換。

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');
    }
}

我們定義了一個ASCII字符的調色板,并將每個像素的強度映射到一個字符,從而創建了基于文本的圖像。

第四步,生成ASCII圖片。

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!");
}

執行以下命令運行程序:

cargo run R.png

最后,呈現了我們的ASCII美術作品,既將其保存為文本文件以供分享,也將其直接打印到控制臺以獲得即時滿足感。

責任編輯:武曉燕 來源: coding到燈火闌珊
相關推薦

2019-03-21 08:59:35

Rust虛擬化架構

2023-06-19 14:14:24

Rust程序Web

2023-06-12 08:00:48

Napi-rsRust 前端工具

2024-06-04 10:49:05

Rust插件開發工具

2024-06-12 08:00:07

2024-05-17 09:49:44

RustCursive界面

2020-07-15 08:00:52

Rust語言技巧

2023-05-26 17:21:15

PythonRust

2023-05-23 18:11:12

Rust數組元組

2022-03-10 17:02:51

Rust單鏈表數據結構

2021-04-29 08:00:00

Windows微軟安全

2019-09-05 12:46:52

云計算大數據未來機場

2021-06-03 07:45:25

Rust Git 終端 UI

2023-09-21 11:39:29

RustJetBrainsIDE

2024-02-26 07:26:27

RustC++開發

2019-11-01 10:49:21

技術開源應用

2023-05-04 07:33:39

Rust變量常量

2020-09-07 06:30:00

神經網絡數據圖形

2023-09-15 12:25:14

JetBrainsRust開源

2021-05-12 09:20:11

Window-rsRustwindows
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩亚洲视频 | xnxx 日本免费| 国产高清一区二区三区 | 蜜桃精品视频在线 | 色久伊人| 午夜影院免费体验区 | 亚洲免费人成在线视频观看 | 成人在线免费观看 | 日韩精品免费在线 | 午夜久久av | 福利视频三区 | 在线视频三区 | 国产精品视频入口 | 欧美一二精品 | 日韩精品免费视频 | 日本一区二区三区四区 | 天天干天天爽 | 精品亚洲一区二区 | 四虎成人免费电影 | 日韩在线 | 日韩一区在线观看视频 | 中文字幕一区二区三区四区 | 成人在线免费观看 | 亚洲国产精品99久久久久久久久 | 亚洲成人精品 | 黄色网址大全在线观看 | 久久丝袜 | 91精品国产综合久久精品 | 国产欧美一级二级三级在线视频 | 欧美一级欧美三级在线观看 | 男女羞羞视频在线免费观看 | 久久久久久久网 | 综合久 | 欧美精品在线免费观看 | 91欧美| 日韩中文字幕免费在线观看 | 欧美综合在线观看 | 国产三级国产精品 | 国产免费a视频 | 国产成人精品亚洲日本在线观看 | 国产精品久久久久久亚洲调教 |