簡體   English   中英

嘗試使用Magick ++刪除背景並使其在C ++中透明

[英]Trying to remove background and make it transparent in c++, using 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"); 
    }

圖片objects.png是 輸入圖像

我得到這個作為輸出 在此處輸入圖片說明

我認為有一個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"); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM