ユーザーが 2 つの画像の異なる領域を検出するゲームを作成します。この 2 つの画像にはいくつかの異なる領域があり、すべて同じように見えるため、ユーザーはそれを確認する必要があります。
そのため、2 つの異なるビットマップ イメージを比較して、異なる領域を検出したいと考えています。
誰かが私にヒントを与えることができますか?キャンバスを使用する必要がありますか?
HTML5、javascriptでこのゲームを作っています……。
ユーザーが 2 つの画像の異なる領域を検出するゲームを作成します。この 2 つの画像にはいくつかの異なる領域があり、すべて同じように見えるため、ユーザーはそれを確認する必要があります。
そのため、2 つの異なるビットマップ イメージを比較して、異なる領域を検出したいと考えています。
誰かが私にヒントを与えることができますか?キャンバスを使用する必要がありますか?
HTML5、javascriptでこのゲームを作っています……。
最初に各画像をキャンバスに描画します
var img1 = (your first image),
img2 = (your second image),
ctx1 = document.createElement('canvas').getContext('2d'),
ctx2 = document.createElement('cavnas').getContext('2d');
ctx1.canvas.width = img1.width;
ctx2.canvas.width = img2.width;
ctx1.canvas.height = img1.height;
ctx2.canvas.height = img2.height;
ctx1.drawImage(img1, 0, 0);
ctx2.drawImage(img2, 0, 0);
次に、各imgの画像データを取得します
var data1 = ctx1.getImageData(0, 0, img1.width, img1.height);
var data2 = ctx2.getImageData(0, 0, img2.width, img2.height);
最後に比較します(これは、img1とimg2が同じ次元であると想定しています)
var different = [];
for (var y=0; y<img1.height; y++){
for (var x=0; x<img1.width; i++){
var pos = (x * 4) + (y * (img.width * 4));
for (var i=0; i<4; i++){
if (data1[pos + i] != data2[pos + i]){
different.push({x: x, y: y});
}
}
}
}
これにより、2つの画像間で異なるすべてのピクセルのx、y座標の配列が得られます。
画像から何らかの方法で RGB 値を取得し、それらを比較する必要があります。openCV ライブラリを参照して、画像処理がどのように行われるかを確認できます。
または、Web ページに埋め込むアプレットを設計することもできます。Java は、RGB 値を操作するためのクラスを提供します。
1 つのイメージの色を反転し、別のイメージと重ね合わせます。絶対差を取り、どのピクセルで差が生じているかを確認します。
JavaScript は画像内のピクセルをチェックできません。そのため、カラーピッカーは div でのみ機能します (背景色を読み取ります)。