相当于Magick ++中的随机噪声

时间:2015-06-18 15:12:01

标签: c++ image random imagemagick magick++

我在网上发现了很多关于使用ImageMagick的命令行函数来创建随机噪声图像的文档,但是还没有弄清楚如何在Magick ++中重现它。

ImageMagick有+噪音方法Random:

convert -size 100x100 xc: +noise Random random.png

我希望能够将像素设置为Color(“random”),例如:

sought.extent(Geometry(640,416), Color("random"), CenterGravity);

在随机噪音的画布中嵌入较小的图像。当然,随机不是Color的可接受的论据,但我想知道是否存在等价物?理想情况是,如果还可以限制颜色范围 - 例如只有12位(#000-#FFF)。

1 个答案:

答案 0 :(得分:5)

方法import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; public abstract class BaseActivity extends AppCompatActivity { public Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutResource()); toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setTitle(BaseActivity.this.getResources().getString(R.string.app_name)); //getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } protected abstract int getLayoutResource(); protected void setActionBarIcon(int iconRes) { toolbar.setNavigationIcon(iconRes); } } 是一个很好的起点,但如果你真的想要随机/随机。使用Theme.AppCompat.Light.NoActionBar

Magick::Image::addNoise()

noise

由Mark Setchell编辑

就像我不喜欢编辑其他人的帖子一样,我想添加一些对于评论来说太大而不是竞争性答案的东西,所以这是我所知道的唯一方式。请随意忽略/删除/分离这部分!

如果OP想要对应于12位值的数字,我在命令行做了一个小实验,看看我怎么强迫它:

-fx "rand()"

生成一个1000像素的图像并强制输出为未压缩的PGM文件,您可以看到其中的值。然后对它们进行排序以查看生成的最大值是什么,它是4096.所以,我认为我建议的#include <Magick++.h> int main(int argc, const char ** argv) { Magick::InitializeMagick(*argv); Magick::Image image("100x100", "gray50"); image.fx("rand()"); image.write("noise.jpg"); return 0; } 表达式(convert -size 10000x1 xc:gray -fx "(rand*4096)/quantumrange" -depth 16 -compress none pgm:- | sed '1,3d' | tr " " "\n" | sort -n )可能有助于生成12位值。

其他更新

对于使用随机颜色映射区域,FX表达式可能看起来像......

-fx

(rand*4096)/quantumrange&amp; (i<100 & j<480) ? rand() : u 或x / y偏移,i是原始图像。一个有趣的选项,但遍历所有像素将是缓慢的。更快的选择是创建一个随机彩色图像实例,并使用j将图像放在另一个上面。

u

Wizards do make magick