JAVA比较两张图片相似度的方法
本文实例讲述了JAVA比较两张图片相似度的方法。分享给大家供大家参考。具体如下:
摘要:
importjava.awt.image.BufferedImage;
importjava.io.File;
importjavax.imageio.ImageIO;
/***比较两张图片的相似度*@authorGuihua**/publicclassBMPLoader{//改变成二进制码
publicstaticString[][]getPX(Stringargs){int[]rgb=newint[3];
Filefile=newFile(args);
BufferedImagebi=null;
try
主要代码如下:
importjava.awt.image.BufferedImage;
importjava.io.File;
importjavax.imageio.ImageIO;
/**
*比较两张图片的相似度
*@authorGuihua
*
*/
publicclassBMPLoader{
//改变成二进制码
publicstaticString[][]getPX(Stringargs){
int[]rgb=newint[3];
Filefile=newFile(args);
BufferedImagebi=null;
try{
bi=ImageIO.read(file);
}catch(Exceptione){
e.printStackTrace();
}
intwidth=bi.getWidth();
intheight=bi.getHeight();
intminx=bi.getMinX();
intminy=bi.getMinY();
String[][]list=newString[width][height];
for(inti=minx;i<width;i++){
for(intj=miny;j<height;j++){
intpixel=bi.getRGB(i,j);
rgb[0]=(pixel&0xff0000)>>16;
rgb[1]=(pixel&0xff00)>>8;
rgb[2]=(pixel&0xff);
list[i][j]=rgb[0]+","+rgb[1]+","+rgb[2];
}
}
returnlist;
}
publicstaticvoidcompareImage(StringimgPath1,StringimgPath2){
String[]images={imgPath1,imgPath2};
if(images.length==0){
System.out.println("Usage>javaBMPLoaderImageFile.bmp");
System.exit(0);
}
//分析图片相似度begin
String[][]list1=getPX(images[0]);
String[][]list2=getPX(images[1]);
intxiangsi=0;
intbusi=0;
inti=0,j=0;
for(String[]strings:list1){
if((i+1)==list1.length){
continue;
}
for(intm=0;m<strings.length;m++){
try{
String[]value1=list1[i][j].toString().split(",");
String[]value2=list2[i][j].toString().split(",");
intk=0;
for(intn=0;n<value2.length;n++){
if(Math.abs(Integer.parseInt(value1[k])-Integer.parseInt(value2[k]))<5){
xiangsi++;
}else{
busi++;
}
}
}catch(RuntimeExceptione){
continue;
}
j++;
}
i++;
}
list1=getPX(images[1]);
list2=getPX(images[0]);
i=0;
j=0;
for(String[]strings:list1){
if((i+1)==list1.length){
continue;
}
for(intm=0;m<strings.length;m++){
try{
String[]value1=list1[i][j].toString().split(",");
String[]value2=list2[i][j].toString().split(",");
intk=0;
for(intn=0;n<value2.length;n++){
if(Math.abs(Integer.parseInt(value1[k])-Integer.parseInt(value2[k]))<5){
xiangsi++;
}else{
busi++;
}
}
}catch(RuntimeExceptione){
continue;
}
j++;
}
i++;
}
Stringbaifen="";
try{
baifen=((Double.parseDouble(xiangsi+"")/Double.parseDouble((busi+xiangsi)+""))+"");
baifen=baifen.substring(baifen.indexOf(".")+1,baifen.indexOf(".")+3);
}catch(Exceptione){
baifen="0";
}
if(baifen.length()<=0){
baifen="0";
}
if(busi==0){
baifen="100";
}
System.out.println("相似像素数量:"+xiangsi+"不相似像素数量:"+busi+"相似率:"+Integer.parseInt(baifen)+"%");
}
publicstaticvoidmain(String[]args){
BMPLoader.compareImage("E:\\12.bmp","E:\\1.bmp");
}
}
希望本文所述对大家的java程序设计有所帮助。
热门推荐
10 小红书平安祝福语简短
11 生日祝福语大全女孩简短
12 收生日红包祝福语 简短
13 领证幽默祝福语简短
14 法考面试祝福语简短
15 老哥出门祝福语简短语
16 送灯祝福语简短独特
17 幼儿狗年祝福语大全简短
18 好听的元旦简短祝福语