OpenCV 将rgb图像转化成字符图像

news2024/9/21 21:41:15

将RGB图像转换成字符图像(ASCII art)通常涉及到灰度化、降采样、映射字符等一系列步骤。以下是一个简化的OpenCV+C++实现示例:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>

// 字符映射表,从亮到暗
std::string charset = " .:-=+*#%@";

// 将RGB图像转为字符图像
std::string RGBToASCII(const cv::Mat& img) {
    // 1. 转换为灰度图像
    cv::Mat gray;
    cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);

    // 2. 降采样,缩小图像以便适应字符分辨率
    cv::resize(gray, gray, cv::Size(40, 40), 0.1, 0.1);  // 此处0.1只是一个示例,具体比例需根据终端窗口大小和字符数量调整

    // 3. 将灰度值映射为字符索引
    std::string asciiArt;
    for (int i = 0; i < gray.rows; ++i) {
        for (int j = 0; j < gray.cols; ++j) {
            // 获取当前像素的灰度值,并将其归一化到charset长度范围内
            double val = gray.at<uchar>(i, j) / 255.0 * (charset.size() - 1);
            size_t index = static_cast<size_t>(val);

            // 添加对应字符到字符串
            asciiArt += charset[index];
                              asciArt += ' ';
        }
        asciiArt += '\n'; // 添加换行符
    }

    return asciiArt;
}

int main() {
    cv::Mat img = cv::imread("input.jpg", cv::IMREAD_COLOR);
    if (img.empty()) {
        std::cerr << "Could not open or find the image!" << std::endl;
        return -1;
    }

    std::string asciiArt = RGBToASCII(img);

    // 输出或保存字符图像
    std::cout << asciiArt << std::endl;

    // 或者保存到文件
    std::ofstream file("ascii_art.txt");
    if (file.is_open()) {
        file << asciiArt;
        file.close();
    } else {
        std::cerr << "Unable to open file for writing." << std::endl;
    }

    return 0;
}

这段代码首先将RGB图像转换为灰度图像,然后对其进行降采样,最后将每个像素的灰度值映射到字符集中的字符,形成ASCII艺术图像。这里的字符集可以根据需要自定义,亮的像素映射到字符集中靠前的字符,暗的像素映射到靠后的字符。此外,降采样的比例应根据输出设备的实际分辨率进行调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL—redo log、undo log以及MVCC

MySQL—redo log、undo log以及MVCC 首先回忆一下MySQL事务的四大特性&#xff1a;ACID&#xff0c;即原子性、一致性、隔离性和持久性。其中原子性、一致性、持久性实际上是由InnoDB中的两份日志保证的&#xff0c;一份是redo log日志&#xff0c;一份是undo log日志&#xff…

国产Copilot--通义灵码安装教程

文章目录 在 Visual Studio Code 中安装通义灵码步骤1步骤2步骤3步骤4 参考 在 Visual Studio Code 中安装通义灵码 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解…

LLM - 大语言模型(LLM) 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136617643 大语言模型(LLM, Large Language Model)的发展和应用是一个非常广泛的领域&#xff0c;涉及从早期的统计模型到现代基于深度学…

获取淘宝商品详情API数据指南(item_get-获得淘宝商品详情)

获取淘宝商品详情API数据是一个复杂的过程&#xff0c;涉及到多个步骤和可能的权限问题。以下是一个基本的指南&#xff0c;帮助你了解如何使用item_get接口获取淘宝商品详情。 1. 注册淘宝开放平台账号 首先&#xff0c;你需要在淘宝开放平台注册一个账号。这是获取API权限和…

【Java 并发】AbstractQueuedSynchronizer

1 AQS 简介 在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。 AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。 AQS 的核心也包括了这些方面: 同步队列, 独占式锁的获取和释放, 共…

数据结构之链式二叉树续

1.获取叶节点个数 获取叶子结点个数&#xff0c;我们这里也用递归的方法 利用分治思想去解决这个问题 ●代码思想&#xff1a; 1. 当遇到空树或者遇到空的节点时&#xff0c;也就是说这是的叶子为NULL&#xff0c;这是我们返回0 2. 当遇到左节点或者右节点为空&#xff0c…

精酿啤酒与咖喱饭的异国风味

当醇厚的Fendi Club啤酒与香浓的咖喱饭相遇&#xff0c;一场味蕾的异国之旅就此展开。Fendi Club啤酒以其与众不同的麦香和细腻的泡沫&#xff0c;为咖喱饭增添了别样的风味&#xff0c;而咖喱饭的香辣与丰富口感&#xff0c;又为啤酒带来了更多的层次感。 Fendi Club啤酒&…

docker的常用指令

docker的常用指令 从docker镜像仓库&#xff0c;搜索所有和mysql有关的镜像 docker search mysql 从docker仓库拉取mysql docker pull mysql这里的mysql是指使用search搜索出来的所有容器的NAME 如果和我一样遇到以下问题&#xff1a; 我可以登录阿里云的官网&#xff0c;找…

点成分享 | 了解您的健康指标:血细胞沉降率(ESR)

一、背景介绍 当我们在体检或进行临床血液检验时&#xff0c;时常会在检验单上看到这样一个指标&#xff1a;ESR。 有时检验单上只有一个简单的箭头&#xff0c;那么这个结果代表什么含义呢&#xff1f;这个指标又能如何反映我们的健康状况呢&#xff1f; 今天点成生物就带大…

Mysql 无法启动,mysql-bin.日志丢失删除处理

在linux操作系统中&#xff0c;当mysql无法启动时候&#xff0c;先看日志 2024-03-15T05:20:16.352075Z 0 [Warning] [MY-000081] [Server] option max_allowed_packet: unsigned value 107374182400 adjusted to 1073741824. 2024-03-15T05:20:16.352156Z 0 [Warning] [MY-010…

三种方式使用纯 CSS 实现星级评分

本文介绍三种使用纯 CSS 实现星级评分的方式。每种都值得细品一番~ 五角星取自 Element Plus 的 svg 资源 <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 1024 1024" style""><pathfill"currentColor"d"M283.84 …

ctfshow-XXE(web373-web378)

目录 XXE&#xff08;外部实体注入攻击&#xff09; web373 web374 web375 web376 web377 web378 知识点 XXE&#xff08;外部实体注入攻击&#xff09; XXE这几关有个前提flag在根目录下文件名为flag web373 <?php error_reporting(0); libxml_disable_entity_…

定制红酒:定制流程中的专业建议与指导,帮助客户做出理想选择

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知消费者在定制红酒时可能会面临诸多选择和困惑。因此&#xff0c;云仓酒庄洒派提供专业的建议和指导&#xff0c;帮助消费者在定制流程中做出理想选择。 云仓酒庄洒派的专业团队会为消费者提供红酒品种和产区的举荐。云仓酒庄洒派会根…

基于udp协议的网络通信(windows客户端版+简易聊天室版),重定向到终端

目录 和windows通信 引入 思路 WSADATA 代码 运行情况 简单的聊天室 思路 重定向 代码 terminal.hpp -- 重定向函数 服务端 客户端 运行情况 和windows通信 引入 linux和windows都需要联网,虽然他们系统设计不同,但网络部分一定是相同的,所以套接字也是一样的 这…

Diffblue生成单元测试

什么是Diffblue Diffblue Cover 是一个强化学习 AI 平台&#xff0c;可自动编写全面的、类似人类的 Java 单元测试&#xff0c;从而节省开发人员时间、提高测试覆盖率并降低回归风险。Cover 以 IntelliJ IDE 插件&#xff08;Cover Plugin&#xff09;、CLI 应用程序&#xff…

中等职业学校人工智能技术与应用(710212)专业解决方案

一、专业背景 1.1人工智能确立为国家战略 近年来&#xff0c;人工智能技术取得了显著进展&#xff0c;不仅在理论层面有所突破&#xff0c;更在实际应用中展现出强大的潜力和价值。其发展趋势日益明显&#xff0c;展现出多方面的特点。“深度学习”与“大数据”的结合成为当前…

QT信号与槽实现方式

1、第一种实现方式 在QT开发工具UI界面先拖入按钮&#xff0c;然后鼠标右键拖入按钮&#xff0c;点击选中槽&#xff0c;在页面选着需要的信号&#xff0c;然后OK&#xff0c;随即将会跳转到类的.cpp文件&#xff0c;&#xff08;这种UI代码结合的方式&#xff0c;会自动去绑定…

力扣101---对称二叉树(简单题)

题目描述&#xff1a; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 非递归Java代…

Jenkins cron定时构建触发器

from&#xff1a; https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax 以下内容为根据Jenkins官方文档cron表达式部分翻译过来&#xff0c;使用机翻加个人理解补充内容&#xff0c;包括举例。 目录 介绍举例&#xff1a;设置方法方法一&#xff1a;方法二&#xf…

通过简单的案例入门Mybatis~

目录 一.概述 二.JDBC的缺点 三.案例 1.创建测试类 2.加载Mybatis核心配置文件获取SqlSessionFactory 3.获取SqlSession对象 4.执行sql 5.释放资源 一.概述 Mybatis是一款持久层框架&#xff0c;用于简化JDBC开发。所谓框架&#xff0c;就是一个半成品软件&#xff0c;…