gpt4 book ai didi

image-processing - 如何使用 imagemagick 或 magick++ 从图像中提取多边形

转载 作者:行者123 更新时间:2023-12-04 07:21:34 25 4
gpt4 key购买 nike

我想用Magick++或者imagemagick命令行来解压来自图像的 n 边形。 n 边形由列表指定顶点。所以,例如,我希望能够提取一个 n 边形由点 a、b、c、d、e、f、g、h 定义喜欢:

      a---------h
| |
| g-f
| |
b---c |
| |
| |
| |
d-------e

例如,png 图像。我想我必须做一些事情使用图像蒙版进行复合操作,或者如果使用 Magick++,则定义一个DrawableClipPath。但是,我找不到这方面的任何文档。任何帮助将不胜感激。

附注我更喜欢使用 C++ 和 Magick++ 来做这件事,因为我有其他的处理要做,但我也很乐意用命令行来做。

最佳答案

您可以结合使用 Magick::DrawablePolygonMagick::Image.composite

新建一个mask图像,并绘制n边形

Magick::Image mask;
mask.draw( Magick::DrawablePolygon( std::list<Magick::Coordinate> ) );

然后只需将蒙版应用到目标图像,并合成现有源。

Magick::Image dest;
dest.composite( Magick::Image, Magick::Geometry, Magick::CompositeOperator );

例子:

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

int main(int argc, const char ** argv)
{
Magick::InitializeMagick(*argv);

Magick::Image mask( Magick::Geometry(120,120), Magick::Color("white"));
Magick::Image dest( Magick::Geometry(120,120), Magick::Color("white"));

// Example source image
Magick::Image source;
source.read("rose:");
source.resize(Magick::Geometry(200,120)); // Resize for fun

mask.fillColor("black");

// Define points
std::list<Magick::Coordinate> points;
points.push_back(Magick::Coordinate(10, 10)); // a
points.push_back(Magick::Coordinate(10, 50)); // b
points.push_back(Magick::Coordinate(30, 50)); // c
points.push_back(Magick::Coordinate(30,100)); // d
points.push_back(Magick::Coordinate(75,100)); // e
points.push_back(Magick::Coordinate(75, 30)); // f
points.push_back(Magick::Coordinate(60, 30)); // g
points.push_back(Magick::Coordinate(60, 10)); // h

// Draw Polygon "n-gon"
mask.draw( Magick::DrawablePolygon(points) );

// Extract n-gon from source image to destination image
dest.clipMask(mask);
Magick::Geometry offset(0,0,0,0);
dest.composite( source, offset, Magick::OverCompositeOp );

dest.write("n-gon.png"); // Output
}

n-gon

关于image-processing - 如何使用 imagemagick 或 magick++ 从图像中提取多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22667274/

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