以下是从图片中删除背景的python代码。我按照https://pypi.python.org/pypi/pgmagick/中给出的步骤在Mac OS X小牛中安装pgmagick。
import pgmagick as pg
def trans_mask_sobel(img):
""" Generate a transparency mask for a given image """
image = pg.Image(img)
# Find object
image.negate()
image.edge()
image.blur(1)
image.threshold(24)
image.adaptiveThreshold(5, 5, 5)
# Fill background
image.fillColor('magenta')
w, h = image.size().width(), image.size().height()
image.floodFillColor('0x0', 'magenta')
image.floodFillColor('0x0+%s+0' % (w-1), 'magenta')
image.floodFillColor('0x0+0+%s' % (h-1), 'magenta')
image.floodFillColor('0x0+%s+%s' % (w-1, h-1), 'magenta')
image.transparent('magenta')
return image
def alpha_composite(image, mask):
""" Composite two images together by overriding one opacity channel """
compos = pg.Image(mask)
compos.composite(
image,
image.size(),
pg.CompositeOperator.CopyOpacityCompositeOp
)
return compos
def remove_background(filename):
""" Remove the background of the image in 'filename' """
img = pg.Image(filename)
transmask = trans_mask_sobel(img)
img = alphacomposite(transmask, img)
img.trim()
img.write('out.png')
img = open("example.jpg")
remove_background(img)
在运行此程序时,我遇到以下错误
Traceback (most recent call last):
File "imgrm.py", line 48, in <module>
remove_background(img)
File "imgrm.py", line 41, in remove_background
img = pg.Image(filename)
Boost.Python.ArgumentError: Python argument types in
Image.__init__(Image, file)
did not match C++ signature:
__init__(_object*, Magick::Image)
__init__(_object*, unsigned int, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, MagickLib::StorageType, char const*)
__init__(_object*, Magick::Blob, Magick::Geometry, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
__init__(_object*, Magick::Blob, Magick::Geometry, unsigned int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
__init__(_object*, Magick::Blob, Magick::Geometry, unsigned int)
__init__(_object*, Magick::Blob, Magick::Geometry)
__init__(_object*, Magick::Blob)
__init__(_object*, Magick::Geometry, Magick::Color)
__init__(_object*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)
__init__(_object*)
有什么问题我该如何解决?
最佳答案
我在pgmagick
上遇到了同样的问题,并使用以下代码解决了:
image = pg.Image(str(img))