图像函数的包装器,以著名的pil/枕头模块的方式使用和调用,但在opencv内部工作。
PILasOPENCV的Python项目详细描述
#皮拉斯潘乔夫 图像函数的包装器,以著名的pil或枕头模块的方式使用和调用,但仅在内部使用opencv和numpy。由于OpenCV中没有Python的TruteType字体支持(它存在于OpenCV C库中),所以该模块可能是有用的,因为它支持集成在图像中的所有TtrueType字体。这取决于库freetype py。请参阅下面的详细信息。由于使用了gif2numpy和numpy2gif模块,您还可以将gif图像加载并保存为numpy格式。opencv不支持gif格式。
此库可用于将旧的pil项目迁移到opencv,或者如果由于某种原因pil或pillow不能在您的机器或平台上使用。
使用
pip install PILasOPENCV
或者下载模块并使用以下命令安装它:
python setup.py install
然后更改项目文件开头的import命令
from PIL import Image
或
import PIL.Image as Image
到
import PILasOPENCV as Image
内部不再使用pil或枕头库,而是使用opencv和numpy模块来完成所有的图形工作。
示例脚本:
from __future__ import print_function
import PILasOPENCV as Image
# was: from PIL import Image
im = Image.new(“RGB”, (512, 512), “red”)
im.show()
testfile = “lena.jpg”
im = Image.open(testfile)
print (type(im))
# JPEG (512, 512) RGB
im.save(“lena.bmp”)
im.show()
small = im.copy()
thsize = (128, 128)
small.thumbnail(thsize)
small.show()
box = (100, 100, 400, 400)
region = im.crop(box)
print(“region”,region.format, region.size, region.mode)
# region = region.transpose(Image.ROTATE_180)
region = region.transpose(Image.ROTATE_180)
region.show()
im.paste(region, box)
im.show()
#导出和导入CV2/Numpy图像 您可以使用getim()和setim()命令将cv2/numpy映像从映像实例导出并导入到映像实例:
from __future__ import print_function
import PILasOPENCV as Image
import cv2
im = Image.open(“lena.jpg”)
numpy_image = im.getim()
print(type(numpy_image), numpy_image.shape)
cv2.imshow(“numpy_image”, numpy_image)
cv2.waitKey(0)
# import numpy image
new_im = Image.new(“RGB”, (512, 512), “black”)
new_im.setim(numpy_image)
new_im.show()
#truetype字体在pilasopencv中的应用 pilasoppenov支持在python中使用truetype字体。为此,需要安装python模块freetype py。要导入和使用TrueType字体,您可以执行以下操作:
from __future__ import print_function
import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
import cv2
# was: from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype(“arial.ttf”, 18)
print(font)
im = Image.open(“lena.jpg”)
draw = ImageDraw.Draw(im)
text = “Lena’s image”
draw.text((249,455), text, font=font, fill=(0, 0, 0))
print(ImageFont.getsize(text, font))
mask = ImageFont.getmask(text, font)
# in PIL this code is written differently:
# print(font.getsize(text))
# mask = font.getmask(text)
print(type(mask))
cv2.imshow(“mask”, mask)
im.show()
#注意: 这是一个相当稳定的开发版本。仍然小心使用。已经对它进行了测试,可以在tests目录中找到测试。
#待办事项: 最常用的类和方法,如imagemode、imagecolor、imagechops已经实现,但是还没有完全测试。image、imageFont、imageDraw、imageGrab和imageFilter已经用几个测试用例进行了测试。 这些类的某些函数/方法丢失,但尚未实现。 如果要导入它们,请使用:
import PILasOPENCV as ImageMode
import PILasOPENCV as ImageColor
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFilter
import PILasOPENCV as ImageChops
import PILasOPENCV as ImageFont
import PILasOPENCV as ImageGrab
PIL类ImageEnhance、ImageFile、ImageFileIO、ImageMath、ImageOps、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWin、ImageGL尚未实现。
如果要使用imageFont中的getSize和getMask方法,则必须以不同的方式使用它们:
from __future__ import print_function
import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
import cv2
# from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype(“ARIAL.ttf”.lower(), 18)
im = Image.open(“lena.jpg”)
draw = ImageDraw.Draw(im)
text = “Lena’s image”
draw.text((249,455), text, font=font, fill=(0, 0, 0))
# in PIL:
# print(font.getsize(text))
# mask = font.getmask(text)
print(ImageFont.getsize(text, font))
mask = ImageFont.getmask(text, font)
print(type(mask))
cv2.imshow(“mask”, mask)
im.show()
如果你想分叉这个项目,请随时这样做。给我一个消息,以防你正在分叉和改进代码。 abunkahle@t-online.de
#依赖项: 您需要安装numpy、opencv、freetype、mss、gif2numpy和numpy2gif才能完全运行模块。 用
安装pip install numpy opencv-python freetype-py mss gif2numpy numpy2gif
#版本历史记录:
2.7:错误修复在绘制文本和线条或其他绘制对象时未绘制线条,已修复
2.6:方法显示的错误修复:未删除旧窗口,因此显示错误,已修复
2.5:在绘制多边形、文本、线、点、矩形时,对以浮点形式而不是整数形式给出的坐标进行错误修复;在字母掩码和图像的通道数量不相同时,对合成坐标进行错误修复;在以单整数形式给出值时,对泛光填充进行错误修复
2.4:捕捉到几个例外情况,如果未安装依赖关系模块,您仍然可以使用基本功能,实现ImageDraw方法位图,实现ImageChops方法屏幕,现在将单个或多个帧保存在GIF文件中
2.3:更新了GIF2numpy版本1.2的模块
2.2:python3对文件对象的错误修复,现在可以加载来自gifs的多个帧,并可以使用seek(frame)检索这些帧
2.1:虽然opencv不支持gif图像,但pilasoppensv现在可以通过gif2numpy库加载gif图像
2.0:禁用imagegrab.grapboard(),以防抛出异常,例如在ubuntu/linux上
1.9:已禁用ImageGrab.GrabClipboard(),它抛出某些平台上的例外情况
1.8:imagegrab.grab()和imagegrab.grabClipboard()的实现依赖于mss
1.7:从数组中修复
1.6:修复了FromBytes、GetData、PutData和在未安装FreeType Py或缺少dll时捕获的异常
#执照 麻省理工学院