使用Magick ++ ImageMagick 7.0.5-4进行统计Q16 x86_64问题

时间:2017-04-11 09:32:22

标签: c++ imagemagick magick++

我正在尝试使用Magick ++ API版本7获取最小图像:

img.type(Magick::GrayscaleType);

auto stats = img.statistics();

std::cout << argv[0] << ":" << stats.channel(Magick::PixelChannel::GrayPixelChannel ).minima() << std::endl;

img.write("test" + Glib::ustring(argv[0]) + ".bmp");

对于多个图片,我得到相同的minima值和错误的值&gt; 1.0。
在书面图像上运行identify -verbose会给我正确的价值。

我该如何解决这个问题?

编辑1

如果我这样做

img.read("test" + Glib::ustring(argv[0]) + ".bmp");
stats = img.statistics();
std::cout << argv[0] << ":" << stats.channel(Magick::PixelChannel::GrayPixelChannel ).minima() << std::endl;

我得到最小值的正确值(在ImageMagick 7中它不在0 - 1.0范围内)。

img这是

的结果
img.composite(mask, 0, 0, Magick::OverCompositeOp);

掩码是

Magick::Image newmask(Magick::Geometry(width,height),Magick::Color("white"));
    newmask.strokeColor("black");
    newmask.fillColor("black");
    newmask.draw( Magick::DrawableCircle(xc,yc, xc,yc+rc-10) );
    newmask.transparent(Magick::Color("black"));
    newmask.depth(8);
    mask = newmask;

1 个答案:

答案 0 :(得分:0)

请记住,您正在使用Quantum值 - 系统安装之间存在差异。

使用value/QuantumRangevalue*QuantumScale来计算01.0之间的显示值。 stats.channel(Magick::PixelChannel::GrayPixelChannel).minima()/QuantumRange

// sample_program.cpp
#include <iostream>
#include <Magick++.h>

using namespace std;
using namespace Magick;

int main(int argc, const char * argv[]) {
    InitializeMagick(argv[0]);
    Image img("rose:");
    img.type(GrayscaleType);
    auto stats = img.statistics();
    cout << stats.channel(PixelChannel::GrayPixelChannel).minima()/QuantumRange << endl;
    return 0;
}

例如......

 $ ./sample_program
 => 0.14478

编译&amp;执行...

 $ convert rose: -type GrayScale -format '%[fx:minima]\n' info:
 => 0.144778

与CLI应用程序比较

std:cout

略微舍入,但<DatePicker style="@android:style/Widget.DatePicker" android:layout_width="match_parent" android:layout_height="wrap_content" /> 预计会出现这种情况。