我正在尝试使用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;
答案 0 :(得分:0)
请记住,您正在使用Quantum值 - 系统安装之间存在差异。
使用value/QuantumRange
或value*QuantumScale
来计算0
和1.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" />
预计会出现这种情况。