Если вы хотите справиться с атакой водяного знака, я порекомендую вам алгоритмы хеша изображения, они быстры и прочны для такого рода нападений.Позвольте мне показать вам некоторые примеры
#include <opencv2/core.hpp>
#include <opencv2/core/ocl.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/img_hash.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
void watermark_attack(cv::Ptr<cv::img_hash::ImgHashBase> algo)
{
std::vector<std::string> const origin_img
{
"origin_00.png", "origin_01.png",
"origin_02.png", "origin_03.png"
};
std::vector<std::string> const watermark_img
{
"watermark_00.png", "watermark_01.png",
"watermark_02.png", "watermark_03.png"
};
cv::Mat origin_hash, watermark_hash;
for(size_t i = 0; i != origin_img.size(); ++i){
cv::Mat const input = cv::imread(origin_img[i]);
cv::Mat const watermark_input = cv::imread(watermark_img[i]);
//compute the hash value of image without watermark
algo->compute(input, origin_hash);
//compute the hash value of image with watermark
algo->compute(watermark_input, watermark_hash);
//compare the different between the hash values
//of original image and watermark image
std::cout<<algo->compare(origin_hash, watermark_hash)
<<std::endl;
}
}
int main()
{
using namespace cv::img_hash;
//disable opencl acceleration may(or may not) boost up speed of img_hash
cv::ocl::setUseOpenCL(false);
watermark_attack(AverageHash::create());
}
Результаты 1,2,1,2, все пас.
Эта небольшая программа сравнивает исходное изображение (слева) со своим братом водяного знака (справа), чем меньше значение вычисления, тем более похожи изображения. Для случая AverageHash рекомендуем пороговое значение 5 (это означает, что если результат сравнения больше 5, изображения считаются очень разными).
Не только водяной знак, AverageHash предоставляют другие «побочные эффекты», этот алгоритм работает под контрастом, шум (гауссовский, перец и соль), а также изменение размера и jpeg-сжатия.
Другое преимущество использования хеша изображения заключается в том, что вы можете хранить хеш-значения ваших изображений в файле, вам не нужно снова и снова вычислять значения хэша.
Simple and fast method to compare images for similarity покажет вам более подробную информацию о модуле img_hash opencv.