有没有一种方法可以画出;替换字符“;Python中使用cv2或PIL的图像上的符号
我在画替换角色,�, ASCII值:65533,在图像中使用Open CV2或ImageDraw作为文本元素,但它始终添加非字符,, ASCII值:65533,改为在图像上显示。我甚至验证了我创造的角色是正确的,但没有成功有没有一种方法可以画出;替换字符“;Python中使用cv2或PIL的图像上的符号,python,python-imaging-library,opencv-python,Python,Python Imaging Library,Opencv Python,我在画替换角色,�, ASCII值:65533,在图像中使用Open CV2或ImageDraw作为文本元素,但它始终添加非字符,, ASCII值:65533,改为在图像上显示。我甚至验证了我创造的角色是正确的,但没有成功 有没有办法添加� 使用特定字体大小将图像添加为文本?您可以这样做: #!/usr/local/bin/python3 from PIL import Image, ImageFont, ImageDraw import numpy as np import cv2 #
有没有办法添加� 使用特定字体大小将图像添加为文本?您可以这样做:
#!/usr/local/bin/python3
from PIL import Image, ImageFont, ImageDraw
import numpy as np
import cv2
# Open image with OpenCV
im_o = cv2.imread('start.png')
# Make into PIL Image
im_p = Image.fromarray(im_o)
# Get a drawing context
draw = ImageDraw.Draw(im_p)
font = ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf",32)
draw.text((40, 20),"What character �",(255,255,255),font=font)
# Convert back to OpenCV image and save
result_o = np.array(im_p)
cv2.imwrite('result.png', result_o)
请注意,PIL和OpenCV使用不同的颜色通道顺序,即RGB和BGR,因此您确实需要注意这一点,除非像我在这里所做的那样以黑色、白色或绿色进行注释。还有更多的讨论和简单的解决方法。您可以这样做:
#!/usr/local/bin/python3
from PIL import Image, ImageFont, ImageDraw
import numpy as np
import cv2
# Open image with OpenCV
im_o = cv2.imread('start.png')
# Make into PIL Image
im_p = Image.fromarray(im_o)
# Get a drawing context
draw = ImageDraw.Draw(im_p)
font = ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf",32)
draw.text((40, 20),"What character �",(255,255,255),font=font)
# Convert back to OpenCV image and save
result_o = np.array(im_p)
cv2.imwrite('result.png', result_o)
请注意,PIL和OpenCV使用不同的颜色通道顺序,即RGB和BGR,因此您确实需要注意这一点,除非像我在这里所做的那样以黑色、白色或绿色进行注释。还有更多的讨论和简单的解决方法。
ASCII
只有0到127的值。值65533
不是asci代码。否则,您可以绘制该值的字符符号。尝试打印打印(str(chr(65533)),您会发现,在chr()
中,ython3使用Unicode,但OpenCV可能只使用ASCII码。但是如果在Python2中运行它,您会得到ValueError:chr()arg不在范围(256)
我在Python3上运行,您可以在这里看到。该符号确实有一个ASCII值[link](顺便说一句:如果您尝试使用ASCII
编码写入chr(65533)
,即open('output.txt','w',encoding='ASCII')。write(chr(65533))
则会出现错误unicodecodeerror:'ASCII'编解码器无法对位置0处的字符'\ufffd'进行编码:序号不在范围内(128)
ASCII
只有0到127个值。Value65533
不是asci代码。如果不是这样,您可以绘制该值的字符符号。尝试打印(str(chr(65533)),您将看到3在chr()中使用Unicode
但是OpenCV可能只使用ASCII码。但是如果你在Python 2中运行它,你会得到ValueError:chr()arg不在范围(256)
我在Python 3上运行,你可以在这里看到。这个符号确实有一个ASCII值[link](顺便说一句:如果你试图用ASCII
编码编写chr(65533)
,即open('output.txt','w',encoding='ascii')。write(chr(65533))
然后出现错误UnicodeEncodeError:'ascii'编解码器无法对0位置的字符'\ufffd'进行编码:序号不在范围内(128)