图像函数的包装器,以著名的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时捕获的异常

#执照 麻省理工学院

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPA。Eclipselink没有为mySQL提供密码,但它应该提供   我的Servlet和@FormDataParam存在java问题   java将什么作为上下文参数传递到文件I/O方法中?   如果两个值相同,java无法找到其中一个单选按钮   java在变量和方法名中使用下划线   JavaSpringMVC单线程安全?   klazz类的java Arraylist(反射Api)   java如何在数字字符串中查找最频繁的数字?   JavaAPI设计:使数据更易于阅读与强制更多API调用   JavaHadoopMapReduceforGoogleWebGraph   java无法启动gauge API:Runner意外退出   java如何在bluemix上使用ibm工作负载调度器?   拉取一年中某一周特定日期的所有日期   java为什么是我的角节点。js应用程序将图像上传到S3� 邮递员正确上传时的符号?   在不使用任何第三方jar的情况下将文件从本地传输到linux系统(java代码)   java将现有文件夹复制到Eclipse工作区中新创建的项目中   Java中的regex RegExp帮助   当使用“系统”外观时,Java组合框setSelectedItem会出现故障   JavaASM:在类的方法中获取局部变量名和值