4

画像(カメラから取得したもの、またはギャラリーから選択したもの)をタトゥーに変換する必要があるという点で、tattoolaterのアプリを使用しています...

私の要件は次のようなものです

ここに画像の説明を入力してください githubからサンプルコードを見つけました https://github.com/DrewDahlman/ImageFilter/tree/master/Android/project

画像フィルタリング用です。

画像をタトゥーに変換するこの正しいプロセスかどうかはわかりません

誰かがアンドロイドでこのタトゥーを知っているなら、私がたくさんググったことを私に提案してください

前もって感謝します..

4

2 に答える 2

2

差分フィルターが必要です:

1)水平方向の差を計算します(ここでは垂直方向のセグメントがあります)

2)垂直方向の差を計算します(ここでは、水平セグメント)

3)あなたまたは2つの地図、輪郭を見つける

4)必要に応じて、ビットマップオブジェクトを再作成します。

(編集済み)のようなもの:

int[] pixels;
int width = yourbitmap.getWidth();
int height = yourbitmap.getHeight();
yourbitmap.getPixels(pixels, 0, width, 0, 0, width, height);

// transform grayscale
int[] image = new int[width*height];
for (int y=0; y<height; y++)
    for (int x=0; x<width; x++)
    {
        int pixel = image[y*width + x];
        image[y*width + x] = (Color.red(pixel) + Color.green(pixel) + Color.blue(pixel))/3;
    }

// calculate diff_x (vertical segments)
int[] dx = new int[width*height];

for (int y=0; y<height; y++)
    for (int x=0; x<width; x++)
        dx[y*width + x] = (x==0 || y== 0 ? 0 : Math.abs(image[y*width + x] - image[y*width + x-1]));

// calculate diff_y (horizontal segments)
int[] dy = new int[width*height];

for (int y=0; y<height; y++)
    for (int x=0; x<width; x++)
        dy[y*width + x] = (x==0 || y== 0 ? 0 : Math.abs(image[y*width+x] - image[(y-1)*width+x])); 


// when the color intensity is higher than THRESHOLD, accept segment
// you'll want a slider to change THRESHOLD values
bool[] result = new bool[width*height];
const int THRESHOLD = 60; // adjust this value

for (int y=0; y<height; y++)
    for (int x=0; x<width; x++)
        result[y*width + x] = (dx[y*width + x] > THRESHOLD || dy[y*width + x] > THRESHOLD);

Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
for (int y=0; y<height; y++)
    for (int x=0; x<width; x++)
               result.setPixel(x, y, result[y*width+x]? Color.Black : Color.White);
于 2013-03-25T08:55:51.577 に答える
0

あなたはこれを使うことができます:

 public static Bitmap ConvertToBlackAndWhite(Bitmap sampleBitmap) {
        ColorMatrix bwMatrix = new ColorMatrix();
        bwMatrix.setSaturation(0);
        final ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(
                bwMatrix);
        Bitmap rBitmap = sampleBitmap.copy(Bitmap.Config.ARGB_8888, true);
        Paint paint = new Paint();
        paint.setColorFilter(colorFilter);
        Canvas myCanvas = new Canvas(rBitmap);
        myCanvas.drawBitmap(rBitmap, 0, 0, paint);
        return doBlackWhiteImage(rBitmap);
    }

public static BlackWhiteImage doBlackWhiteImage(Bitmap myBitmap) {
        int[] allpixels = new int[myBitmap.getHeight() * myBitmap.getWidth()];
        myBitmap.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0,
                myBitmap.getWidth(), myBitmap.getHeight());
        for (int i = 0; i < myBitmap.getHeight() * myBitmap.getWidth(); i++) {
            if (allpixels[i] == Color.BLACK)
                // do something
            else if (allpixels[i] == Color.TRANSPARENT)
                // do something
            else if (allpixels[i] == Color.WHITE)
                // do something
            else {
                allpixels[i] = Color.WHITE;
            }
        }
        myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0,
                myBitmap.getWidth(), myBitmap.getHeight());
        return myBitmap;
    }
于 2013-03-25T08:58:44.437 に答える