我找到了这个python脚本,它将网络摄像头输入转换为ASCII到命令行,并进行了一些更改以满足我的需要。我想在输出中添加一个Unicode字符,但是,每当我实际运行它时,它仅会打印出一个框,而不是正确的Unicode。我需要更改什么以确保它能输出实际的Unicode字符?
import cv2
from time import sleep, time
import sys
import curses
from curses import wrapper
import locale
locale.setlocale(locale.LC_ALL, '')
#stdscr.addstr(0, 0, mystring.encode('UTF-8'))
x = 160
sx = 4
chars = ['\u23FA', ".", ".", " ", " ", " ", " ", " ", " ", " "]
size = x*sx, int(x*sx*.75)
operating = False
ongoing = True
#font.set_bold(True)
fpsa = 0
br = (255, 255, 255)
fr = (0, 0, 0)
lenc = len(chars)
visload = False
mt = False
aa = False
def toAscii(pic, scr):
global operating
m = 0
for y in pic:
tm = max(y)
if tm > m:
m = tm
fx = 0
fy = 0
h,w = scr.getmaxyx()
#for y in pic:
#for x in y:
for _y in range(h-1):
for _x in range(w-1):
y = pic[int(_y/float(h) * len(pic))]
x = y[int(_x/float(w) * len(y))]
scr.addstr(_y, _x, chars[int(x/m*(lenc-1))].encode('UTF-8'), curses.color_pair(1))
fx += 1
fy += 1
fx = 0
operating = False
cap = cv2.VideoCapture(0)
def main(scr):
global operating
while True:
ret, frame = cap.read()
curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLACK)
colored = cv2.resize(cv2.resize(cv2.cvtColor(frame, 0), (x, int(x*0.75))), (640, 480))
colored = cv2.cvtColor(frame, 0)
gray = cv2.resize(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), (x, int(x*.75)))
if not operating:
operating = True
if mt:
_thread.start_new_thread(toAscii, (gray, scr))
else:
toAscii(gray, scr)
scr.refresh()
#gray = cv2.resize(gray, (640, 480), interpolation = cv2.INTER_NEAREST)
#cv2.imshow('frame',cv2.resize(gray, (640, 480)))
def _main(scr):
try:
main(scr)
except KeyboardInterrupt:
pass
wrapper(_main)
cap.release()
cv2.destroyAllWindows()
答案 0 :(得分:0)
这取决于您使用的终端仿真器。表情符号字符在终端中显示为框的原因是终端仿真器不支持Unicode字符。
我刚刚在iTerm2上测试了您的代码,该代码支持Unicode,并且可以正常工作。