gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:43:20 24 4
gpt4 key购买 nike

我有一个红色背景的图像“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

最佳答案

我认为有一个 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 channel 。

#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");
}

关于c++ - 尝试使用 magick++ 在 c++ 中删除背景并使其透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30262450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com