日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

用Rust和OpenCV打造ASCII圖片

來源: 責編: 時間:2024-05-29 17:32:31 160觀看
導讀使用Rust和OpenCV的動態組合,將任何舊圖片變成一個炙手可熱的ASCII藝術圖片。想象文字像像素一樣跳舞,在純文本的基礎上捕捉圖像的本質。圖片OpenCV下載地址:https://opencv.org/releases/.創建一個Rust項目:cargo new im

使用Rust和OpenCV的動態組合,將任何舊圖片變成一個炙手可熱的ASCII藝術圖片。想象文字像像素一樣跳舞,在純文本的基礎上捕捉圖像的本質。0Pd28資訊網——每日最新資訊28at.com

圖片圖片0Pd28資訊網——每日最新資訊28at.com

OpenCV下載地址:https://opencv.org/releases/.0Pd28資訊網——每日最新資訊28at.com

創建一個Rust項目:0Pd28資訊網——每日最新資訊28at.com

cargo new img-to-ascii

0Pd28資訊網——每日最新資訊28at.com

在Cargo.toml文件中,加入以下依賴項:0Pd28資訊網——每日最新資訊28at.com

[dependencies]opencv = "0.88.5"

0Pd28資訊網——每日最新資訊28at.com

將下面的圖片存儲在項目的根目錄下:0Pd28資訊網——每日最新資訊28at.com

圖片圖片0Pd28資訊網——每日最新資訊28at.com

第一步,讀取圖片,然后灰度化0Pd28資訊網——每日最新資訊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();}

0Pd28資訊網——每日最新資訊28at.com

這段代碼使用OpenCV讀取圖像并將其轉換為灰度,為我們的ASCII藝術創作奠定了基礎。0Pd28資訊網——每日最新資訊28at.com

第二步,縮放和調整大小。0Pd28資訊網——每日最新資訊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();}

0Pd28資訊網——每日最新資訊28at.com

在這里,我們要確保我們的ASCII圖片不會太壓扁或拉伸,通過代碼計算最佳比例因子并相應地調整圖像的大小。0Pd28資訊網——每日最新資訊28at.com

第三步,ASCII轉換。0Pd28資訊網——每日最新資訊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');    }}

0Pd28資訊網——每日最新資訊28at.com

我們定義了一個ASCII字符的調色板,并將每個像素的強度映射到一個字符,從而創建了基于文本的圖像。0Pd28資訊網——每日最新資訊28at.com

第四步,生成ASCII圖片。0Pd28資訊網——每日最新資訊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!");}

0Pd28資訊網——每日最新資訊28at.com

執行以下命令運行程序:0Pd28資訊網——每日最新資訊28at.com

cargo run R.png

0Pd28資訊網——每日最新資訊28at.com

最后,呈現了我們的ASCII美術作品,既將其保存為文本文件以供分享,也將其直接打印到控制臺以獲得即時滿足感。0Pd28資訊網——每日最新資訊28at.com

0Pd28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-91534-0.html用Rust和OpenCV打造ASCII圖片

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Spring 中如何控制 Bean 的加載順序?

下一篇: 打造高可用系統:深入了解心跳檢測機制

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 浪卡子县| 丰原市| 凯里市| 贺兰县| 大新县| 安国市| 江川县| 驻马店市| 中牟县| 九江市| 平利县| 辉南县| 潜山县| 江西省| 丰镇市| 新竹市| 崇明县| 利辛县| 深水埗区| 余江县| 阿瓦提县| 类乌齐县| 南充市| 青铜峡市| 江源县| 清水河县| 峨边| 郓城县| 儋州市| 扬中市| 绥江县| 黄山市| 浦北县| 鄂伦春自治旗| 开封县| 金华市| 呼和浩特市| 南开区| 久治县| 晋城| 涪陵区|