将图像转成ASCII艺术转换的C++实现

将图像转成ASCII艺术转换的C++实现

C/C++ 图片处理

访问GitHub主页

共104Star

详细介绍

ASCII ART

C++ implementation of image to ASCII art conversion.

The main functionality is in ascii_art in ascii_art.h. For general inputs I use stb_image_resize.h to resize the input. Otherwise, the only dependency is the standard library.

There are three executable demos exposing this:

image2ascii

Convert an input image into ASCII art

For example, if you issue:

./image2ascii ../max-schmeling.jpg

You'll see:



                          ______
                     __qMMMMMMMMMMp___
                   _qMMMMMMMMMMMMMMMQQp_
                  _QMMMMMMMMMMQMMMMMMMQMQ_
                 _QMMMMMMMMMMMMMMMMMMMMMMQy
                qMMMMMME``` `""""#WMMMMMMQ#_
               qMMMMMQE@`            `@MMMMp
               qMMMMME@"`             _@MMMp
             _qQMMMME"`__p_____      ___MW^
            _qMD?,3ME"`@@@7_QMM@   qQMMMQ
            @MM   qM@`      7 ``  -"7WE@@
            "QMp  _E@`            "    -@
            _QMM_  Q@_            "`    @
            qMMMMQpj@@         -__;)  `_
            @MMMMMMQp@"         ` @__ _'
             @MMMMMMQ@_`   ,=--,,,_@" j
              `7MMMMQMpjj`    _qp_@-`j@_
                "MMMMpMQpp__`````_pqp@@@`"-,_                         _qMMMMMQp_
                 @MMMQp"7MQp___;_jQF````     `"--,__             _pQqqMMMMMMMMMMp_
                  MMMMM_  `7WWWMW^              __g@@@=--u__      MMMMMMMMMMMMMMMMp
                  _QMMMMMMp__           _,.- -"@@@@"`     `"@@_    MMMMMMMMMMMMMQMMp
                _qMMMMMMMMMMQ_        ```     ``"``          `MQp_ dMMMQQMMMMMQQQMMMp
               _qMMMMMMMMMMMMMp    ,,`        ```             `TMMp_MMMMQQ@QMMMMMMMMQ
            _qQMMMMMMMMMMMMMMMMp-"" `                           "MMMMMMMQ@""@MMMMMMMMp
        __g@@qQMMMMMMMMMMMMMMMMMp                               _QMMMMMMQQp_@QQMMMMMM"
      _q@@@@@MMMMMMMMMQMMMMMMMMMp;.                             "MMMMMMQMMMQMQMMMMMM#
      #@@@@@qMMMMMMMMQQQQqQQMMM#                                 MMMMMMMMMQMQMQMMMMM`
    _qQ@@@_qMMMMMMMMMMMQMMQQQME `                       _`       `9MMMMMMMMMMMMQMMMM
    gQ@@@qMMMMMMMMMMMMMMMMMW7`_p_`                     _p_         qMMQMMMMMQMMMMMMF
   q#M@@qMMMQMMQQMQMMMMMW"   `=Q__                    _jQp         `MMMMQMQMMMQQME"
   qpE@@@MMMMMQMQMMMQQMb       J@@`                  `@MMQ_          7MMQMMMMMWQMM_
   Q#Q@@@@@MMQ@FMQMMQMD        j@@-`                  `"WWMQ_         `MMQ``7T7QMEMp
   QMQQQ@@qMME@j-:`WWE          `@_`                        Mp_        q#M@";"@@@@@Mp
   qMpQQ@_QQQ@__j"` _@          _@@_        ____             9Qp_      q#@@;`"@@@"jMMp
   "M#QE@QMME@@_ - -j@_         `j@@@`      "@@@   ;         `JMQp_    q#@``   _@@@@Q#
    q#Q@qMQQy""`_ ;@qp@``        "@@@@`                      `@QMMp_   qM@````""@Q@@Q#
    qMQQMME@j_-`@"%_qMp___ __;    @"`"`                 ``` __@QMMMQp jqQ@__ ```_@QQQ#
    #QQMMEp@@"-"-`@@#ME@@_@@"`   `;```                  ```""@@MMMMMMp__#p@"`__j@@@QM#
   qMQMMME@_`""-_`j@#MMQ@@@j"`    `;"`                   ```"@QMMMMMMMMpFMQp@j@@Q@@@Q#
   QMMMQM@@-@%""- jqMMQQ@@@@@@`    `_``                   ``"@Q"MMMMMMMMMQpQQ_QW@@@@Q`
  qMMMQQ@p@@j_ "-_@qQMMQ@@@@@@__-  `--`                  ```"@Q_`@MMMMMMMMMQQQMMp@@@
 _QMMMQQQ@@__""%_j@MMMMQQQ@@@@@@_`  "```               ` ``""@Qp  "MMMMMMMMMMMME"`
 qMMMQQQQ@@@_@"__@QQMQQMMQ@@@@@@____";``                 ```"_@g_  `@MMMMMMMMMME`
 QMQQMQQQ@@@@@j@jQQKMMMQQQQQQ@@@@@@@j@___`      ````    ___pqMQQ#    `?MMMMMMME@
 MMMMMMMQ@@@@j@@QQ# qMMQQQMQQQQQ@@@@_@p@@_   _______pQQMQMMMMMEMy        `"7T"`
 "MMMQE@@@@@@@qQQK  qMMQQQQQQQQQQ____QQppQqMMQMMQMMMMMM#QQpQWQQM#_
   MMQp@@@@@@qQW"   "MMMMMMMMMQQMQQQQQMEEMMMMQQQqqQWQ#QMQMMMMQQQQQp
   `MMMQQQ___QF`    qMMMQMMMM#QMpQQQMQM##QMMQQQQMMMMM#QQQpQQMMMMMMQp_
    7MMMMQMMW"       qMQQMQQMMMMMMp#MMQMMMMMQMMQQQMQMMMMQMMMMMMMMMMMMp
      `7WWF"         qMMMQQQQQQQQQQQQQQQQQMMMMMMMMMMMMMMMMQQMMMMMMMMMMp_
                    qMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQMMQMMMMMMMMMMMM#_
                   _QMMMMMMMMMMMMMMQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQMMMMMMp
                   qMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQQMMMMMMMMMMMMMMMMMMM_
                   QMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQMMMMMM#
                  _QMMMMMMMMMMMMMMMMQMMMMMMMMMMMMMMMMMMMMMMMMMMQMMMMMMMMMM

spy

Visualize a matrix similar to MATLAB's spy command, but as ASCII art. This command constructs the cotangent Laplacian of an input triangle mesh and visualizes this sparse matrix to the terminal:

For example, if you issue:

./spy ../suzanne.obj

You'll see:

',                           _, ,.i .  .                 ~`7^*==,i,_____  .  i .__    `*=<___  .__  j,i.
  ',                             u                              ^"`77"`**~==CkiQ______   "``*~=k,___
    ',                       `7W~~8W2,Q`j?j___" '     __"                                           7=JTQ@j_""   _
      ',                     _         _     ``7"*>~=wci,                            j             _    _   7^%wmi
        ',                     `^*=a___,_u,   ,                                                      "w___, .
          ',                           `^v=L__` ` __   ,"                                               `^=_]"_
            ',                                 `^6AQ_g_                                                      ^k__
              ',                                       `7*=aQ_x                       m_+                        `
                ',           j& *-~                            `7*w,_,- *    ~    _      ^qp"  -    s"-
                  ',                                                  `7*=upp_^ `           ^wx=
                    ',                                   __                   `7^=uQ_^          7wQt
                      ',                                    ``7">~~=<i,,___            `7*=i__
                        ',   ,,___                                           ``7^*~=<i         `^*=i__
                          ',       ```7^~~=ii,____                                                     `^*=.__
 ,     (         ,       ,  '_         .           ``7"^~          _.                               _          `"~
 )  L   _                }    9__  J     -                      _ ?                                 3_<  "
 `  d   [       ^  _     j     nAg .                             ]           _                       5_
    L   (_                    _   3y     _?   _                                                       3_ _/
    -p   \                b   -     9_<`_                                                              \6_
    `K   5_               {  _      /<Rp                                                                \ ^
    ]]  _C[               d        ( `  5gr   " `       "                                                3e `"
    ^j   `?_                      *   ` " B_ y-        g                                                  3_-    -
     (p    ]               y               yM_"   _>                                                       A* _ "
    '!)  ""7p              }       "    -   \ 0_<_,     -                                                   \</  -
    ' [   :"j              3            :     C_BQ.  _                                                       K,
      O    q"p                              _x `  9_ V,                                                       \>y
      _     _j              b                    ___jQ<                                                        q\
     \"p   ) U_             ]              j~ -    ` ~5_y                                                       ^_
_   ;  %  -   V             d           ; ~   /        TR__ _,                        _,,                        7
b             J_     "                                   `Wg_ l                       \_"
j             ;1      b                                  s ?WQ _                       T,_
M             ?__     )                                   "   jp                        \.
 )[             \     j        "y,                           `  Mp      u    _           \  ^  ,     r
 }b              p    "      _*                                   Mp_y                    V/        f
 q)              #     p                                          _JR_          :_>        y     _ "
 ({               p    )                                          ` < 9p    ~ _ p`          p    ^
  d             " 3    [                                         "      8p___                b_C
  d                y   d                                                 -5Q`                "Q
 _Rp              =0             _                               r      .-"`Rg                 @      _
   p              ! p   )                                              ?      AQ                E
 j #              C q   [                                           `_Y`        Bp  y^           y_6
  `#             ?  :p  "                                           ?`          : 9p .            @/
   d   y            J3   p                                                      y*  ?_             y
V             ?y                                         7Pe__                        ',
M__           " _     \                                  "`  L7x__                      ',
 l)              k     _                                          _Mm_                    ',
 `4             ~ \    \                                        >~  ` "^e__                 ',
 _F               C\    _                                        ,    - .<=*q_                ',
 \.L             _- \   \                                            _,-      7^m_              ',
   I   _            j\   _                                                      jw^"<_            ',
 )  L   _       .        \   `?<_                               . ^`                                ',
    y   Gg                _   _  JD<_                            `           `                        ',
    Q) = fb               \  =.    .R[7w_                                                               ',
    'q   "/_                      *`  "  `b&_                                                             ',
    ['L  ")!p              (       `    ,   ^ Te_                                                           ',
      U    v"_              p                < `  P<__                                                        ',
     j"p   - T_             l              L~     `^`~>q_                                                       ',

ascii3d

Ray trace an input 3D triangle mesh or 3D scene as ASCII art.

For example if you issue,

./ascii3d ../suzanne.obj

You'll see:

                              _____mmmmmmmmmm_____                              
                          __p@@@@"""""""""""""""@@@m__                          
                        _g@@@"`___``   ``   ``___`"@@@p_                        
                      _d@@@@_j"`  `%_      _/`  `"@_@@@@@_                      
                     /@@@@j@`       @_    _@       `%@j@@@h                     
                    j@j@"` _;````";_ "_  _@ _;"````;_ `"@@@k                    
          -'___  _ _@` __@"`__, ,_ `- `""` ;" _ ,,__`"%__ `@_ _  ___'-          
        ,  _QQQQp_^#@@"`` j@_-``-_%  `    `  ;_-``"_@@ ```"@@"_qQQQQ__ \        
        @ j    `7QpQ@@_   @@"    j_          _)    `@@   _j@QQp@`    % _        
        ) |``   @@@Qp@@_;_"@@____@@          @@____y@/_;_j@qQE@@   ``j j        
         @ ,``` @@@@QQp@__@_"R@@@`-           `@@@R"_@"_jqQW@@@@ ```, j`        
          "__~__"@@qQMQQp@j_@@""`              `""@@__jqQMMQ@@@"__-"jF          
            `%m___"@WMMMMMQQQpp____          ____jQQQQMMMMMK@"___p="            
                 `77777``7FWMMQQQQQp__ __ __jQQQQQMMWF7```7777`                 
                             7WMQMME__    _pQMMQMW^                             
                                3ME@"@mjjpF"@MMK`                               
                                 @@"        "@@                                 
                                _@@`        `"@_                                
                                (@"          `@]                                
                                #@`          `@@                                
```````````````````````````    _@@`          `"@p    ```````````````````````````
``````````````_________________q@"`  _q__p_  `"@p_________________``````````````
             ````"""""""%%@@@@@q@@___"_``_@____@p@@@@@@%""""""""```             
                         ```````Wp__pppppppp__q#"```````                        
                                ``````77777``````                               

This ray-tracer is interactive

Try hitting the hjklJK keys to interact with the 3D scene:

Compilation

mkdir build
cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
make 

Demos depends on libigl, stb, Eigen, Embree.

Note

This implementation is hard-coded to work best with Courier New Bold.