65.9K
CodeProject 正在变化。 阅读更多。
Home

人脸拼贴

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (5投票s)

2009年5月11日

CPOL

3分钟阅读

viewsIcon

302030

downloadIcon

2105

用于创建自己的面部拼贴的 Java 代码

引言

这段Java代码可以生成一个由数百张图像组成的拼贴画,整体观看时会呈现出另一张图像的效果。

背景

我一直在探索Picasa 3的拼贴选项。这些选项仅限于图片堆叠、马赛克、网格拼贴等。我正在寻找一个可以制作形成图像的拼贴选项。令人惊讶的是,我在互联网上找不到这样的工具。因此,我编写了一个小的Java程序,它可以创建照片的拼贴。想要使用他们的照片创建拼贴,以形成他们脸部或其他照片的图像的人可以使用这个程序。下面提供了一些示例图像,以便了解其外观。

原始图像

拼贴

拼贴 - 缩放视图显示数百张小图像

Using the Code

对于想要生成这种拼贴画的人,这里有一些技巧

  1. 在程序的开头,你会找到“自定义部分”。这部分定义了六个参数。修改这些参数以最好地满足您的需求。有关参数的更多详细信息如下。
  2. mainImagePath 是您可以放置模型图像的位置。
  3. sourceFilesPath 是您存放大量将构成拼贴画的图像的文件夹。源图像越多,拼贴画的清晰度就越好。
  4. CollageFilePath 是您希望将拼贴画放置的文件夹。
  5. enlargeSize - 我使用这个参数是因为如果拼贴画的分辨率与原始照片相同,小图像的分辨率会非常低,因此即使放大,您也无法识别小图像。因此,enlargeSize 是拼贴画相对于模型图像放大的倍数。例如:如果您的模型图像是1600*1200,并且您将 enlargeSize 设置为 3,那么拼贴画将是4800*3600的大小。
  6. XpixelsPerBlockYpixelsPerBlock 是拼贴画中每个小块的像素数。可以是16, 12或12, 9等。最好保持4:3的比例,因为大多数图像都是这种比例。像素大小越小,拼贴图像的清晰度越高,但小图像的分辨率会降低,反之亦然。
  7. 使用Java 1.4或更高版本编译Java代码并执行它。
  8. 将模型图像和源图像放在正确的文件夹中,并创建一个文件夹来放置拼贴画。
// ######## CUSTOMIZATION PART ######## - start

// Main image that is formed by collage of images. Must be a bitmap.
private static String mainImagePath = "C:/Image/MainImage.jpg";

// Folder that contains bitmaps which form the collage
private static String sourceFilesPath = "C:/Image/Source/";

// Location where result image to be created.
private static String CollageFilePath = "C:/Image/Collage/";

// The number of times, final collage image to be bigger than actual image, 
// so that the small images are clear when zoomed
private static int enlargeSize = 4;

// Number of pixels in each small block of the actual image. 
// Smaller the pixels, better the final collage. 
// Higher the pixels, small images in final collage look clear. 
// Better to keep the same x-y ratio(4:3 generally) as your source images.
private static int XpixelsPerBlock = 12;
private static int YpixelsPerBlock = 9;

// ######## CUSTOMIZATION PART ######## - end

关注点

对于想要了解更多代码细节的技术人员

  1. 读取模型图像。对于每个小块(根据 XpixelsPerBlockYpixelsPerBlock),找到平均RGB分量。
  2. 读取所有源图像,并找到每个图像的平均RGB分量。(这里不是每个块)
  3. 对于模型图像中的每个块,将其RGB与每个源图像的RGB进行比较(我使用了R G和B的差的平方和的平方根),并找到源图像的分量与块的分量偏差最小。将此匹配项存储在数组中。
  4. 现在您构建拼贴画。使用每个块的匹配源图像。

历史

  • 2009年5月11日:初始版本

如果您有任何建议,请留下评论或给我发邮件。

© . All rights reserved.