Magick++ ImageMagick 7.0.5-4 Q16 的统计数据x86_64问题

Statistics with Magick++ ImageMagick 7.0.5-4 Q16 x86_64 issue

本文关键字:x86 统计数据 问题 Q16 ImageMagick Magick++      更新时间:2023-10-16

我正在尝试使用 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值和错误的值> 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;

请记住,您正在使用昆腾值 - 这些值在系统安装之间有所不同。

使用 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

与 CLI 应用程序比较

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

略有四舍五入,但这在std:cout .