以下是从图片中删除背景的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))

10-04 15:09