Pertanyaan Mengonversi gambar ke baris nilai piksel grayscale


Saya ingin menggunakan node indico API. Saya perlu mengkonversi gambar ke grayscale dan kemudian ke array yang berisi array / baris nilai piksel. Di mana saya memulai?

Alat-alat ini mengambil format khusus untuk gambar, daftar daftar, masing-masing   sub-daftar yang berisi 'baris' nilai yang sesuai dengan n piksel dalam   gambar.

e.g. [[float, float, float ... *n ], [float, float, float ... *n ], ... *n]

Karena piksel cenderung diwakili oleh nilai RGBA, Anda dapat menggunakan   mengikuti rumus untuk mengkonversi ke grayscale.

Y = (0.2126 * R + 0.7152 * G + 0.0722 * B) * A

Kami sedang bekerja pada skala gambar secara otomatis, tetapi untuk saat ini   terserah Anda menyediakan gambar persegi


4
2018-03-20 21:41


asal


Jawaban:


Sepertinya nodeAlat manipulasi gambar sayangnya agak kurang, tetapi ada solusi yang baik.

get-pixels memungkinkan membaca gambar baik dari URL atau dari jalur lokal dan akan mengubahnya menjadi ndarray yang seharusnya bekerja dengan sangat baik untuk API.

API akan menerima gambar RGB dalam format itu get-pixels memproduksinya, tetapi jika Anda masih tertarik untuk mengonversi gambar menjadi grayscale, yang dapat membantu untuk aplikasi lain, itu sebenarnya adalah a sedikit aneh.

Dalam gambar RGB standar, pada dasarnya ada skor luminens yang diberikan untuk setiap warna, yaitu seberapa terang warna itu muncul. Berdasarkan luminansi, konversi ke grayscale untuk setiap piksel terjadi sebagai berikut:

Grayscale = 0.2126*R + 0.7152*G + 0.0722*B

Segera API juga akan mendukung penggunaan langsung URL, pantau terus di depan itu.


4
2018-03-26 21:28



Saya mempertahankan tajam Modul Node.js yang mungkin bisa membuat Anda sedikit lebih dekat dengan apa yang Anda butuhkan.

Contoh berikut akan dikonversi input ke skala abu-abu dan menghasilkan Buffernilai integer, satu byte per piksel.

Anda harus menambahkan logika untuk membagi dengan 255 untuk mengkonversi ke float kemudian dipecah menjadi array array untuk menjaga bahagia Indico API.

sharp(input)
  .resize(width, height)
  .grayscale()
  .raw()
  .toBuffer(function(err, data) {
    // data is a Buffer containing uint8 values (0-255)
    // with each byte representing one pixel
  });

3
2018-03-26 22:47