Dapatkan perbedaan antara dua gambar sebagai gambar transparan di GIMP

21

Saya memiliki dua gambar Adan Byang serupa di banyak daerah.

Saya ingin membuat gambar Csehingga

B = C on top of A

di mana Charus setransparan mungkin. on top ofadalah superposisi lapisan normal.

Jadi Cada semacam perbedaan antara Adan B. Jika Adan Bidentik, maka Cbenar-benar transparan. Jika Adan Bsangat berbeda, maka mereka Cakan hampir identik B.

cheesus, jadi berhentilah menyakiti Monica
sumber
Ada jawaban yang bagus untuk pertanyaan ini tentang Stack Overflow yang menggunakan ImageMagick: stackoverflow.com/questions/5132749/…
AB

Jawaban:

23

Anda bisa menggunakan mode layer "perbedaan" untuk membuat layer mask, dan menerapkannya ke B seperti ini:

  1. Buka kedua gambar sebagai layer, A di bagian bawah, B di atas
  2. Pada dialog layer, tandai mode layer B sebagai "perbedaan". Anda sekarang harus melihat sebagian besar gambar hitam adalah gambar yang sama, dengan area berwarna menandai area yang berbeda. Warna-warna ini, bagaimanapun, tidak akan cocok dengan warna B seperti yang Anda inginkan
  3. Edit-> Salin yang terlihat, untuk mendapatkan salinan efek yang dihitung pada B
  4. Gandakan Layer B, ubah mode kembali ke "Normal" (sebut saja layer ini C)
  5. Pada menu Layers, tambahkan layer mask ke C (Layer-> Mask-> Add Layer Mask).
  6. Dengan topeng dipilih, tempel konten yang disalin pada langkah 3 (edit-> tempel).
  7. Jangkar konten yang di-paste pada layer mask (layer-> Anchor layer)

Itu dia - membuat Layers A dan B tidak terlihat, dan Anda harus sangat dekat dengan apa yang Anda inginkan. Operasi lebih lanjut pada layer mask (saya sarankan menggunakan kurva Colors->) dapat menyesuaikan opacity / transparansi area pada layer C.

pembaruan Saya baru-baru ini menjawab pertanyaan serupa untuk ini di Stackoverflow, di mana OP ingin melakukan tugas secara programatis (Menggunakan Python + Python-imaging-library) - Saya telah memposting program lengkap tentang pertanyaan itu dan mungkin bisa membantu bagi siapa saja tertarik dengan jawaban ini.

jsbueno
sumber
On the layer's dialog, mark B's layer mode as "difference". Maaf apa? Saya melihat jendela alat Layers, dan jika saya klik kanan pada layer B, saya tidak melihat apa pun yang tampak seperti layer mode. Yang paling dekat yang saya temukan adalah Add Layer Mask, tetapi saya tidak berpikir itulah yang Anda maksud. Menggunakan v2.8.22.
Adrian
dengan lapisan yang dipilih, mode lapisan dapat dipilih pada drop-down di bagian atas dialog lapisan, bukan dari menu klik kanan.
jsbueno
Saya mengalami sedikit kebingungan atau kesulitan dengan langkah 6 - sepertinya akan menempel konten ke lapisan baru, bahkan dengan "topeng C" yang dipilih, membuat lapisan keempat bernama "Seleksi Terapung (Lapisan Tempel)" yang diimbangi dari posisi semula - apakah itu seharusnya terlihat?
Code Jockey
Ini adalah "seleksi mengambang" sampai Anda "jangkar" ke tujuannya (Ctrl-H). Pastikan bahwa mask aktif ketika Anda menempelkan (Ctrl-V) jika tidak, penahan dapat pergi ke tempat lain.
xenoid
5

Ada metode sederhana untuk melakukannya:

Buka gambar sebagai dua lapisan, jalankan Filter - Animasi - Optimalkan (Perbedaan), Anda harus mendapatkan gambar hasil yang sama yang sekarang terbuat dari lapisan bawah dan lapisan berbeda di atasnya.

Masalah menjadi rumit hanya jika Anda memiliki transparansi parsial, karena filter menghapusnya.
Ini adalah solusi yang saya temukan untuk kasus ini:

  • Hapus Alpha Channel di kedua lapisan (tindakan ada di menu konteks)

Gambar akan menerima latar belakang putih, tetapi jangan khawatir, kami akan membatalkannya nanti.

  • Filter - Animasi - Optimalkan (Perbedaan)

Sekarang kita memiliki lapisan perbedaan dengan latar belakang putih di tempat-tempat transparansi parsial, tetapi kita membutuhkan piksel-piksel itu untuk transparan, jadi kita akan mengambil bentuk diff dan menyalin gambar bentuk ini dari lapisan atas asli. Pastikan lapisan diff yang baru dibuat dipilih dan melanjutkan:

  • Layer - Layer ke Ukuran Gambar
  • Edit - Salin (Ctrl + C)
  • Kembali ke gambar asli
  • Undo, Undo untuk mengembalikan transparansi ke lapisan kami
  • Edit - Tempel sebagai - Lapisan Baru
  • Alpha to Selection (dalam menu konteks) pada layer diff yang ditempel
  • Hapus lapisan diff yang ditempel
  • Pastikan bahwa lapisan atas dipilih dan Salin (Ctrl + C) dari itu
  • Sekarang Anda memiliki diff, cukup Tempel (Ctrl + V) dan buat layer baru darinya.

Tentu saja, tidak ada keajaiban yang terjadi, dan lapisan atas yang transparan sebagian tidak akan mengubah warna atau mengurangi transparansi lapisan bawah, jadi itu hanya untuk kasus ekstensi, di mana piksel yang diubah dari lapisan atas menutupi lapisan bawah.


Metode PS jsbueno tidak berhasil untuk saya.

pengguna
sumber
1

GIMP memiliki mode kuas bernama "Penghapusan warna". Menerapkan kuas ini, diwarnai dengan warna X, untuk piksel P1 yang pasti menciptakan piksel P2 dengan saluran alfa yang diturunkan, cara memadukan P2 dengan piksel dengan warna X dalam mode normal menghasilkan piksel P1. Efek yang sama, diterapkan ke wilayah yang dipilih atau seluruh gambar dapat dicapai menggunakan tindakan "Warna ke Alpha" .

Mode kuas juga bisa diterapkan ke "Alat klon". Dalam hal ini dimungkinkan untuk mengambil warna dari piksel gambar latar belakang A dan menerapkannya ke piksel yang sesuai dari gambar hasil B. Gambar yang tersisa adalah gambar yang diinginkan C.

Secara rinci pembuatan gambar C adalah sebagai berikut:

  1. Letakkan gambar A dan B sebagai layer (A di bawah B).
  2. Gandakan gambar B dan beri nama C. Letakkan di antara A dan B. Sembunyikan gambar B.
  3. Pilih "Alat Klon". Pada panel "Opsi alat" setel opsi berikut: Mode: "Hapus warna"; Kuas: gunakan kuas bulat tajam ("Kekerasan 100") Ukuran: buat kuas lebih besar untuk dengan mudah mengecat semua gambar sekaligus.
  4. Pilih layer A dan CTRL + pada piksel kiri atas untuk memilih tempat yang akan dikloning dan ingat posisinya (untuk zoom 100% akan menjadi (1,1), untuk 50% itu akan menjadi (2,2) dll).
  5. Sekarang pilih layer C dan mulai mengecat dari kiri atas dan menutupi semua gambar tanpa mengangkat kuas. Tampaknya gambar tidak berubah. Tetapi jika Anda menyembunyikan layer A, Anda akan melihat bahwa layer C sekarang berisi gambar yang diinginkan.
  6. Periksa hasil: Tampilkan lapisan A dan lapisan C. Beralih visibilitas lapisan B untuk memastikan bahwa gambar terlihat sama. (Anda juga dapat memilih Mode "Perbedaan" untuk lapisan B, dalam hal ini Anda harus mendapatkan gambar yang benar-benar hitam.)

Catatan: Metode ini berfungsi seperti yang dijelaskan jika gambar latar belakang buram. Pada bagian transparan gambar latar belakang, campuran C di bagian atas A terlihat berbeda dari gambar B.

pengguna2367602
sumber