Java OpenCVライブラリを使用して2つの画像を比較するにはどうすればよいですか?
2つの画像を比較するには-
-
Image.IO.read()を使用して両方を読み取ります メソッド。
-
両方の高さと幅を取得して、それらが等しいことを確認します。
-
ピクセル値を取得し、両方の画像のRGB値を取得します。
-
これら2つの画像のRGB値の差の合計を取得します。
-
次の式を使用して差のパーセンテージを計算します-
Average = difference/weight*height*3; Percentage = (Average/255)*100;
例
import java.awt.Color; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; public class ComparingImages { public static void main(String[] args) throws Exception { BufferedImage img1 = ImageIO.read(new File("D:\\Images\\test1.jpg")); BufferedImage img2 = ImageIO.read(new File("D:\\Images\\test2.jpg")); int w1 = img1.getWidth(); int w2 = img2.getWidth(); int h1 = img1.getHeight(); int h2 = img2.getHeight(); if ((w1!=w2)||(h1!=h2)) { System.out.println("Both images should have same dimwnsions"); } else { long diff = 0; for (int j = 0; j < h1; j++) { for (int i = 0; i < w1; i++) { //Getting the RGB values of a pixel int pixel1 = img1.getRGB(i, j); Color color1 = new Color(pixel1, true); int r1 = color1.getRed(); int g1 = color1.getGreen(); int b1 = color1.getBlue(); int pixel2 = img2.getRGB(i, j); Color color2 = new Color(pixel2, true); int r2 = color2.getRed(); int g2 = color2.getGreen(); int b2= color2.getBlue(); //sum of differences of RGB values of the two images long data = Math.abs(r1-r2)+Math.abs(g1-g2)+ Math.abs(b1-b2); diff = diff+data; } } double avg = diff/(w1*h1*3); double percentage = (avg/255)*100; System.out.println("Difference: "+percentage); } } }
入力1
入力2
出力
Difference: 92.54901960784314
-
Java OpenCVを使用して2つの画像に対してビット単位のOR演算を実行するにはどうすればよいですか?
bitwise_or()を使用して、ビット単位または2つの画像間を計算できます org.opencv.core.Coreのメソッド クラス。 このメソッドは、3つのマットを受け入れます ソース、デスティネーション、および結果のマトリックスを表すオブジェクトは、ソースマトリックスの各要素のビット単位の論理和を計算し、結果をデスティネーションマトリックスに格納します。 例 次のJavaの例では、画像をバイナリとグレースケールに変換し、結果のビット単位の論理和を計算しています。 import org.opencv.core.Core; import org.opencv.core.Mat;
-
Java OpenCVライブラリを使用してイメージを作成するにはどうすればよいですか?
OpenCVライブラリを使用すると、画像フィルタリング、幾何学的画像変換、色空間変換、ヒストグラムなどの画像処理操作を実行できます。 画像を書く Imgcodecsクラスのimread()メソッドを使用して画像のコンテンツを読み取るたびに、結果がMatrixオブジェクトに読み込まれます。 imwrite()メソッドを使用してイメージを書き込み/保存できます。これは2つのパラメータ、つまり-を受け入れます ファイル −結果を保存するファイルパスを表す文字列値。 Img −保存する画像のデータを含むマトリックスオブジェクト。 例 次のJavaの例は画像の内容を読み取りますc