首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用微型图像组成图像(处理)

使用微型图像组成图像(处理)
EN

Stack Overflow用户
提问于 2017-07-21 20:48:08
回答 2查看 70关注 0票数 0

在我的素描中,你有一堆小图片,将构成一个输入图片。

目前,我的输入是一只手的图片,我的小图像是:https://imgur.com/a/0Y5s9

(3张测试的迷你图片是透明的,所以从imgur拖动它们,它们现在是黑色的)

现在的输出如下所示:http://imgur.com/a/sIZuA

我不知道为什么它们是这样重叠的,我已经让每个迷你图像的背景透明,以便它们可以重叠,所以我需要一个方法来扩大它们。

我想要解决的主要问题是,我需要确保我的迷你图像只构成手,而不是手周围的白色背景。我想,如果这些迷你图像只分配给手的颜色,那么白色背景就不算了。

我不知道该怎么做。帮助?

代码:

代码语言:javascript
运行
复制
final int len=25;
final float thresh=170;

boolean newDesign=false;
PImage pic;

ArrayList<PImage> imgContainer;
int n=3;

void setup() {  
  size(800, 800, P2D);
  colorMode(RGB, 255);
  background(250, 250, 250);
  rectMode(CENTER);
  //imageMode(CENTER);

  pic=loadImage("hand.jpg");
  pic.resize(width, height);

  color c1 = color(200,25,25);
  color c2 = color(25, 255, 200);  

  imgContainer=new ArrayList<PImage>();
PImage pimg1=loadImage("test0.png");
pimg1.resize(50, 50);
imgContainer.add(pimg1);
PImage pimg2=loadImage("test1.png");
pimg2.resize(50, 50);
imgContainer.add(pimg2);
PImage pimg3=loadImage("test2.png");
pimg1.resize(50, 50);
imgContainer.add(pimg3);
  noLoop();
  noStroke();
}

void draw() {
  if (newDesign==false) {
    return;
  }

  pic.loadPixels();

  for (int y = 0; y < height; y+=18) {
    for (int x = 0; x < width; x+=18) {
      // Get the color stored in the pixel
      int index=y*width+x;
      color pixelValue = pic.pixels[index];
      // Determine the brightness of the pixel
      float pixelBrightness = brightness(pixelValue);

      float imgPicked=constrain(pixelBrightness/thresh, 0, n-1);
      image(imgContainer.get((int)imgPicked),x,y);

    }
  }
}

void mouseReleased() {
  newDesign=!newDesign;
  redraw();

    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-21 22:51:45

很难回答一般的“我该怎么做”这类问题。堆栈溢出是为更具体的“我尝试了X,预期的Y,但得到Z”类型问题而设计的。但我会尽力在一般意义上提供帮助。

你在问如何只在大图像的某个特定部分显示你的小图像。

在高层次上,您要做的是在大图像中遍历要绘制小图像的坐标,然后在每个坐标上获取像素,检查它,并且只在像素匹配的情况下绘制一个小图像。

您可以使用嵌套的for循环遍历坐标(您已经完成了此部分),并且可以使用get()函数获得该坐标的像素颜色(可以对此进行排序)。然后,您可以使用一个if语句来检查该颜色,并且只有当它符合某些条件时,才能绘制小图像。

参考文献中可以找到更多的信息,但是有一个非常基本的例子:

代码语言:javascript
运行
复制
for (int y = 0; y < height; y+= 100) {
  for (int x = 0; x < width; x+= 100) {

    color pixelValue = largeImage.get(x, y);

    if(red(pixelValue) > 128){
      image(smallImage, x, y);
    }
  }
}

此代码假定窗口与大图像大小相同。然后,它遍历大图像中的坐标(只查看每100像素),并在该像素处获取颜色。然后,它检查该像素的红色值是否大于128,如果是,则在该坐标下绘制小图像。

这只是一个例子,所以您必须修改该方法以满足您的需要。但是基本思想仍然是:迭代像素,获取颜色,检查颜色,并且只有在颜色匹配的情况下才画出较小的图像。

这也是你贴上彩色字母的图像是如何工作的,它们只绘制一个较小的图像,而是使用底层像素的颜色绘制一个字符。

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 21:06:49

我认为这个网站上的代码为你的问题提供了一个解决方案。

https://lernprocessing.wordpress.com/2010/01/16/projekt-bild-aus-text/

这是一个德国网站(一些代码评论也是德文),所以请随意询问您是否有任何问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45246488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档