gpt4 book ai didi

java - 照片/图像到草图算法

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:22 26 4
gpt4 key购买 nike

有没有人有关于如何将照片和图像(位图)转换为类似草图的图片的想法、链接、库、源代码...?我找不到任何关于如何做到这一点的好消息来源。

我找到了这个链接 How to cartoon-ify an image programmatically?关于如何以编程方式对图像进行卡通化,但我更喜欢将其制作成图像到草图。

我想制作一个 android 应用程序,可以通过编程将 JPEG 照片“转换”为粗略图像。

最佳答案

好的,所以我使用不同的技术找到了自己的答案,就像 Mark 告诉我的那样。我使用以下伪代码:

*s = Read-File-Into-Image("/path/to/image")
*g = Convert-To-Gray-Scale(s)
*i = Invert-Colors(g)
*b = Apply-Gaussian-Blur(i)
*result = Color-Dodge-Blend-Merge(b,g)

前四种方法在网上很容易找到,但是最后一种我找不到很多资料,连源代码都找不到。所以我搜索了PS是如何做到的,并在c++中找到了以下公式:

((uint8)((B == 255) ? B:min(255, ((A << 8 ) / (255 - B)))))

然后我用下面的代码把它转换成Java:

private int colordodge(int in1, int in2) {
float image = (float)in2;
float mask = (float)in1;
return ((int) ((image == 255) ? image:Math.min(255, (((long)mask << 8 ) / (255 - image)))));

}

/**
* Blends 2 bitmaps to one and adds the color dodge blend mode to it.
*/
public Bitmap ColorDodgeBlend(Bitmap source, Bitmap layer) {
Bitmap base = source.copy(Config.ARGB_8888, true);
Bitmap blend = layer.copy(Config.ARGB_8888, false);

IntBuffer buffBase = IntBuffer.allocate(base.getWidth() * base.getHeight());
base.copyPixelsToBuffer(buffBase);
buffBase.rewind();

IntBuffer buffBlend = IntBuffer.allocate(blend.getWidth() * blend.getHeight());
blend.copyPixelsToBuffer(buffBlend);
buffBlend.rewind();

IntBuffer buffOut = IntBuffer.allocate(base.getWidth() * base.getHeight());
buffOut.rewind();

while (buffOut.position() < buffOut.limit()) {
int filterInt = buffBlend.get();
int srcInt = buffBase.get();

int redValueFilter = Color.red(filterInt);
int greenValueFilter = Color.green(filterInt);
int blueValueFilter = Color.blue(filterInt);

int redValueSrc = Color.red(srcInt);
int greenValueSrc = Color.green(srcInt);
int blueValueSrc = Color.blue(srcInt);

int redValueFinal = colordodge(redValueFilter, redValueSrc);
int greenValueFinal = colordodge(greenValueFilter, greenValueSrc);
int blueValueFinal = colordodge(blueValueFilter, blueValueSrc);

int pixel = Color.argb(255, redValueFinal, greenValueFinal, blueValueFinal);

buffOut.put(pixel);
}

buffOut.rewind();

base.copyPixelsFromBuffer(buffOut);
blend.recycle();

return base;
}

如果代码可以改进,请在下面发布新的答案或评论。谢谢!

关于java - 照片/图像到草图算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com