【opencv】示例-ela.cpp JPEG图像的错误等级分析(ELA) 通过分析图像压缩后的差异来检测图像是否被篡改过...
ela_modified.jpg
原始ela_modified压缩后再解压得到compressed_img
差异图像Ela
这段代码的功能是实现JPEG图像的错误等级分析(ELA),通过分析图像压缩后的差异来检测图像是否被篡改过。程序会首先读取一张图片,然后对其应用质量压缩,并比较原始图像与压缩后图像的差异。通过可视化这些差异,可以辅助检测图像是否被修改过。此外,程序包含两个滑动条,允许用户交互性地调整用于显示的缩放比例和压缩质量。
/** @file ela.cpp @author Alessandro de Oliveira Faria (A.K.A. CABELO) @brief 错误等级分析(ELA)技术,可以识别出图像中不同压缩级别的区域。对于JPEG图片,整张图片应当大致在相同的水平。如果图片的某个部分与众不同,表明很可能进行了数字修改。这个例子可以通过压缩错误分析,直观地查看JPG图片的修改情况。有疑问或建议请通过邮件联系Alessandro de Oliveira Faria cabelo[at]opensuse[dot]org或OpenCV团队。 @date 2018年6月24日 */ #include #include using namespace cv; int scale_value = 7; // 初始化缩放值为7 int quality = 95; // 初始化质量为95 Mat image; // 定义原始图像的矩阵 Mat compressed_img; // 定义压缩后的图像矩阵 const char* decodedwin = "the recompressed image"; // 压缩图像窗口标题 const char* diffwin = "scaled difference between the original and recompressed images"; // 差异图像窗口标题 // 处理图像并显示 static void processImage(int , void*) { Mat Ela; // 定义ELA处理结果矩阵 // JPEG压缩步骤 std::vector compressing_factor; // 定义压缩因子 std::vector buf; // 定义压缩缓冲区 compressing_factor.push_back(IMWRITE_JPEG_QUALITY); // 添加JPEG质量压缩参数 compressing_factor.push_back(quality); // 添加当前质量值 imencode(".jpg", image, buf, compressing_factor); // 压缩图像 compressed_img = imdecode(buf, 1); // 解压缩图像 Mat output; absdiff(image,compressed_img,output); // 计算原图与压缩图之间的差异 output.convertTo(Ela, CV_8UC3, scale_value); // 根据缩放值调整ELA结果的可视化效果 // 显示处理后的图像 imshow(decodedwin, compressed_img); // 显示压缩后的图像 imshow(diffwin, Ela); // 显示差异图像 } // 主函数 int main (int argc, char* argv[]) { CommandLineParser parser(argc, argv, "{ input i | ela_modified.jpg | Input image to calculate ELA algorithm. }"); // 解析命令行参数 parser.about("\nJpeg Recompression Example:\n"); // 显示程序信息 parser.printMessage(); // 打印信息 // 读取一个新图像 image = imread(samples::findFile(parser.get("input"))); // 读取图像文件 // 检查图像是否为空 if (!image.empty()) { processImage(0, 0); // 调用processImage函数处理图像 createTrackbar("Scale", diffwin, &scale_value, 100, processImage); // 创建一个用于调整缩放值的滑动条 createTrackbar("Quality", diffwin, &quality, 100, processImage); // 创建一个用于调整质量值的滑动条 waitKey(0); // 等待用户按键 } else { std::cout
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!