检测两张图片相似程度
2014-09-01 10:02
274 查看
原理: 相似图片搜索的原理
代码
package org.linxinboy.utils
{
import flash.display.BitmapData;
import flash.geom.Matrix;
/**
* 2014.4.12
* @author linxinboy
*/
public class BitmapUtil
{
/**
* 返回两张图片的相似度 0 - 100 越高越相似
*/
public static function compare(src0:BitmapData, src1:BitmapData):int
{
var str0:String = hashBitmap(src0);
var str1:String = hashBitmap(src1);
trace(str0);
trace(str1);
var diff:uint = 0;
for(var i:int = 0; i<str0.length; i++)
{
if(str0.charAt(i) != str1.charAt(i))
{
diff++;
}
}
return (64 - diff)/64 * 100;
}
public static function hashBitmap(src:BitmapData):String
{
var bmd:BitmapData = new BitmapData(8, 8);
var w:int = src.width;
var h:int = src.height;
var scale:Number = w > h ? w/8 : h/8;
bmd.draw(src, new Matrix(1/scale, 0, 0, 1/scale));
var ave:uint = 0;
var colorList:Vector. = new Vector.();
for(var i:int = 0; i < 8; i++)
{
for(var j:int = 0; j < 8; j++)
{
var color:uint = bmd.getPixel(i, j);
var r:uint = (color >> 16) & 0xFF;
var g:uint = (color >> 8) & 0xFF;
var b:uint = color & 0xFF;
color = (r * 0.3 + g * 0.59 + b * 0.11)/4;
bmd.setPixel(i, j, (color << 16) | (color << 8) | color);
ave += color;
colorList.push(color);
}
}
ave /= 64;
var str:String = "";
for(i = 0; i<colorList.length; i++)
{
if(colorList[i] >= ave)
{
colorList[i] = 1;
}
else
colorList[i] = 0;
str += colorList[i];
}
return str;
}
}
}
代码
package org.linxinboy.utils
{
import flash.display.BitmapData;
import flash.geom.Matrix;
/**
* 2014.4.12
* @author linxinboy
*/
public class BitmapUtil
{
/**
* 返回两张图片的相似度 0 - 100 越高越相似
*/
public static function compare(src0:BitmapData, src1:BitmapData):int
{
var str0:String = hashBitmap(src0);
var str1:String = hashBitmap(src1);
trace(str0);
trace(str1);
var diff:uint = 0;
for(var i:int = 0; i<str0.length; i++)
{
if(str0.charAt(i) != str1.charAt(i))
{
diff++;
}
}
return (64 - diff)/64 * 100;
}
public static function hashBitmap(src:BitmapData):String
{
var bmd:BitmapData = new BitmapData(8, 8);
var w:int = src.width;
var h:int = src.height;
var scale:Number = w > h ? w/8 : h/8;
bmd.draw(src, new Matrix(1/scale, 0, 0, 1/scale));
var ave:uint = 0;
var colorList:Vector. = new Vector.();
for(var i:int = 0; i < 8; i++)
{
for(var j:int = 0; j < 8; j++)
{
var color:uint = bmd.getPixel(i, j);
var r:uint = (color >> 16) & 0xFF;
var g:uint = (color >> 8) & 0xFF;
var b:uint = color & 0xFF;
color = (r * 0.3 + g * 0.59 + b * 0.11)/4;
bmd.setPixel(i, j, (color << 16) | (color << 8) | color);
ave += color;
colorList.push(color);
}
}
ave /= 64;
var str:String = "";
for(i = 0; i<colorList.length; i++)
{
if(colorList[i] >= ave)
{
colorList[i] = 1;
}
else
colorList[i] = 0;
str += colorList[i];
}
return str;
}
}
}
相关文章推荐
- Python+Opencv识别两张相似图片
- 计算机是怎么知道两张图片相似的呢?
- Python 比较两张图片的相似百分比
- Python+Opencv识别两张相似图片
- Python+Opencv识别两张相似图片
- 老司机带你检测相似图片
- 高度相似图片检测
- 老司机带你检测相似图片
- 老司机带你检测相似图片
- 相似图片检测:感知哈希算法之dHash的Python实现
- 比较两张图片的相似程序
- Python+Opencv识别两张相似图片
- 边缘检测︱基于 HED网络TensorFlow 和 OpenCV 实现图片边缘检测
- 检测图片的主要颜色
- 检测浏览器对事件的支持程度
- Google 以图搜图 - 相似图片搜索原理 - Java实现
- 相似图片搜索的原理
- 学习opencv 混合两张图片
- iOS-比较两张图片内容是否相同,判断一个imageView是否有image
- 检测图片链接是否正常