我有一个大约有一百万张图片的图片库,其中大约一半的图片在同一地点打上了相同的、半透明的水印。
我从哪里开始,检测带有水印的图像?有没有一些标准的工具可以做到这一点?
发布于 2013-03-11 22:06:54
如果根据您的问题,您只想检测带水印的图像,您可以使用以下算法:
代码可能是这样的:
$no_of_pixels = what_you_got;
$matched = 0;
$thumbpixels = array();
$wmark = imagecreatefrompng("watermark.png");
list($width, $height) = getimagesize("watermark.png");
$tesimage = imagecreatefrompng("test.png");
for($h = 0; $h < $height; $h++){
for($w = 0; $w < $width; $w++){
if(imagecolorsforindex($testimage, imagecolorat($testimage, $w, $h)) == $thumbpixels[0]){
while($thumbpixels[$i++] === imagecolorsforindex($tesimage, imagecolorat($wmark, $w, $h)) && $no_of_pixels != $matched){
$matched++;
}
if($matched == $no_of_pixels) echo "Voila, we found it!";
}
}
}
编辑
只是看看你的缩略图例子。如果您只想检测文本,可以尝试使用tesseract-ocr或PhpOCR。
您还可以考虑使用PHPSane
发布于 2013-03-11 21:47:00
检测图像中的几乎所有特征称为对象检测。有一个被广泛使用的图书馆,叫做OpenCV。它有一个非常简单的SDK,尽管设置起来很麻烦。它很好地支持C/C++和(几乎完全支持) Python。第一次开始使用OpenCV,我花了3周的时间来训练我自己的Classfier (training)。
但我不会完全依赖这个解决方案,并考虑我的优先事项。此外,使用自定义分类器也很难达到良好的分类效果。其他方法更耗时。
发布于 2013-03-11 21:47:43
简而言之,不是完全准确的。
在最好的情况下,您只能对图像应用启发式,以查看它是否与精确的水印匹配,并获得置信度评级--例如,如果水印是50%的白色覆盖,则以白色为主的场景可能会给出假阳性,当然反之亦然。
如果图像使用有损压缩(如JPEG )作为边缘,也可能会出现问题,并且饱和度可能会导致水印不像预期的那样饱和,或者不像预期的那样精确定位。
https://stackoverflow.com/questions/15339864
复制相似问题