尝试使用magick ++删除背景并使其在c ++中透明

时间:2015-05-15 14:45:37

标签: c++ imagemagick magick++

我正在使用红色背景的图像“objects.png”,并且我正在尝试使背景透明。代码很简单,但不知怎的,我无法得到理想的结果。我对这个ImageMagick业务很陌生,这是我第一个使用Magick ++的程序。所以,如果你能详细解释一下,那就太棒了。提前致谢。代码就是这样,

    #include <iostream>
    #include <Magick++.h>

    using namespace std;
    using namespace Magick;

    int main(){
        Image my_image("objects.png");
        Color bg_color = my_image.pixelColor(0,0);
        Color new_bg_color(0, MaxRGB, 0, MaxRGB);

        for (int i=0;i<my_image.columns();i++){
            for (int j=0;j<my_image.rows();j++){
                //cout<<"(i,j) : ("<<i<<","<<j<<")\n";
                if (my_image.pixelColor(i,j) == bg_color){
                    my_image.pixelColor(i,j,new_bg_color);
                }
            }
        }
        my_image.write("new_objects.png"); 
    }

Image objects.png是 input image

我将此作为输出 enter image description here

1 个答案:

答案 0 :(得分:1)

我认为有一个Magick::Image.transparent方法可以处理透明度分配。

#include <iostream>
#include <Magick++.h>

using namespace std;
using namespace Magick;

int main(){
    Image my_image("objects.png");
    Color bg_color = my_image.pixelColor(0,0);
    my_image.transparent(bg_color);
    my_image.write("new_objects.png"); 
}

修改

允许Magick::Color的不透明度得到尊重。您需要通过设置Magick::Image.matteMagick::Image.opacity属性来启用图片的Alpha通道。

#include <iostream>
#include <Magick++.h>

using namespace std;
using namespace Magick;

int main(){
    Image my_image("objects.png");
    Color bg_color = my_image.pixelColor(0,0);
    Color new_bg_color(0, MaxRGB, 0, MaxRGB);

    my_image.matte(true); // or my_image.opacity();
    for (int i=0;i<my_image.columns();i++){
        for (int j=0;j<my_image.rows();j++){
            if (my_image.pixelColor(i,j) == bg_color){
                my_image.pixelColor(i,j,new_bg_color);
            }
        }
    }
    my_image.write("new_objects.png"); 
}