OpenCV:相对于参考图像移动/对齐面部图像(图像配准)

2023-11-29

我是 OpenCV2 的新手,正在从事情感识别项目,希望将面部图像与参考面部图像对齐。我希望在进行旋转之前先进行图像翻译。当前的想法是在 x 和 y 坐标的有限范围内运行搜索,并使用平方差之和作为误差度量来选择最佳的 x/y 参数来对齐图像。我使用 OpenCV Face_cascade 函数来检测人脸图像,所有图像都调整为固定大小(128x128)。问题:我需要修改 Mat 图像的哪些参数才能在 x 轴和 y 轴上沿正/负方向移动图像?我相信 Mat 数据类型不再支持 setImageROI?我有两张脸的投资回报率,但我不确定如何使用它们。

void alignImage(vector<Rect> faceROIstore, vector<Mat> faceIMGstore)
{
  Mat refimg = faceIMGstore[1]; //reference image
  Mat dispimg = faceIMGstore[52]; // "displaced" version of reference image
  //Rect refROI = faceROIstore[1]; //Bounding box for face in reference image
  //Rect dispROI = faceROIstore[52]; //Bounding box for face in displaced image
  Mat aligned;

  matchTemplate(dispimg, refimg, aligned, CV_TM_SQDIFF_NORMED);
  imshow("Aligned image", aligned);
}

这种方法的想法基于图像对齐教程,作者:Richard Szeliski使用 OpenCV 2.4 在 Windows 上工作。非常感谢任何建议。


cv::Mat确实支持投资回报率。 (但它不支持 COI - 感兴趣的渠道。)

要应用投资回报率,您可以使用operator()或特殊构造函数:

Mat refimgROI  = faceIMGstore[1](faceROIstore[1]); //reference image ROI
Mat dispimgROI(faceIMGstore[52], faceROIstore[52]); // "displaced" version of reference image ROI

要找到移位图像内的最佳位置,您可以利用匹配模板功能。


根据您的评论,我可以建议以下代码,它将找到第二个(已移位的)补丁附近参考补丁的最佳位置:

Mat ref = faceIMGstore[1](faceROIstore[1]);
Mat disp = faceIMGstore[52](faceROIstore[52]);

disp = disp.adjustROI(5,5,5,5); //allow 5 pixel max adjustment in any direction
if(disp.cols < ref.cols || disp.rows < ref.rows)
    return 0;
Mat map;
cv::matchTemplate( disp, ref, map, CV_TM_SQDIFF_NORMED );

Point  minLoc;
cv::minMaxLoc( map, 0, &minLoc );

Mat adjusted = disp(Rect(minLoc.x, minLoc.y, ref.cols, ref.rows));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV:相对于参考图像移动/对齐面部图像(图像配准) 的相关文章

  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 深度估计的准确性 - 立体视觉

    我正在研究立体视觉 我对这个问题的深度估计的准确性感兴趣 这取决于几个因素 例如 适当的立体校准 旋转 平移和失真提取 图像分辨率 相机和镜头质量 失真越小 色彩捕捉正确 两个图像之间的匹配特征 假设我们没有低成本的相机和镜头 没有廉价的网
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • 如何使用 Alpha 通道为 png 图像着色?

    我正在尝试编写典型的 DVD 弹跳屏幕保护程序 我对此很满意 但我想在每次它撞到墙上时改变标志的颜色 我使用了 fill 但徽标变为彩色矩形 我想更改徽标的颜色 尊重图像的 Alpha 通道 from pygame import impor
  • 我的 Hive 客户端停止使用 Cosmos 实例

    我有一个 Hive 客户端 用 Java 编写 它与 FIWARE 实验室的 Cosmos 全局实例配合得很好 但是 它不再工作了 客户端似乎无法连接 超时 服务器端有什么变化吗 这是因为 FIWARE Lab 的 Cosmos 全局实例已
  • Kotlin 匿名函数用例?

    根据我的理解 Kotlin 中的匿名函数允许您指定返回类型 除此之外 anonymous 中的 return 语句将仅退出函数块 而在 lambda 中它将退出封闭函数 不过 我无法想象 lambda 语法无法提供的 Kotlin 中匿名函
  • 求VCL工具栏布局图设计

    我正在寻找 C 构建器的 VCL 组件 它最好有一个具有拖放功能的工具栏 我想定义一个建筑物或区域 可能不是矩形 并将其分成 房间 或区域 或任何你想称呼它们的东西 我希望能够将 门口 或通道等 从一个房间放入其邻居中 有这样的事吗 最好是
  • 使用 Python 将 Pandas DataFrame 导出为 PDF 文件

    在 Pandas 中为数据框生成 PDF 的有效方法是什么 第一个绘图表matplotlib然后生成pdf import pandas as pd import numpy as np import matplotlib pyplot as
  • HTML WebSocket 是否为每个客户端维护一个开放连接?这个有规模吗?

    我很好奇是否有人有关于 HTML WebSockets 可扩展性的任何信息 对于我读到的所有内容 似乎每个客户端都会与服务器保持开放的通信线路 我只是想知道它是如何扩展的以及服务器可以处理多少个打开的 WebSocket 连接 也许让这些连
  • Java 中如何找到给定类的所有子类?

    在 Java 中 如何尝试查找给定类的所有子类 或给定接口的所有实现者 到目前为止 我有一种方法可以做到这一点 但我发现它效率很低 至少可以说 方法是 获取类路径上存在的所有类名的列表 加载每个类并测试它是否是所需类或接口的子类或实现者 在
  • 不使用 gethostbyname 从 DNS 获取 IP?

    PHP s 获取主机名 就超时而言 函数似乎不可配置 我想将 DNS 请求限制为 1 秒或更短 因为再多的请求就会显示问题并应被忽略 那么 有没有一种方法可以使用套接字或 cURL 来进行 DNS 查询呢 我能够使用 PHP 流发出 SMT
  • 如何恢复 JavaFX TableColumn 的 onEditCommit 中的先前值?

    我有一个用 JavaFX 编写的表 用户可以选择编辑其中一列 当对单元格进行编辑时 我尝试根据新文本重命名一些内部对象 如果重命名失败 我会发出通知并弹出错误对话框 然后我想将原始文本恢复到该字段中 由于某种原因 这让我陷入了错误弹出窗口的
  • 在 bash 脚本中使用“备用屏幕”

    The 备用屏幕被许多 用户交互 终端应用程序使用 如 vim htop screen alsamixer less 它就像终端内容的不同缓冲区 当应用程序退出时它会消失 因此整个终端会恢复并看起来应用程序没有输出任何内容 我想在我自己的
  • REST - HTTP 状态 405 - 不允许的方法

    我尝试在我的网络项目上使用 REST POST 有效 但 DELETE 和 PUT 不起作用 我会看到错误 HTTP 状态 405 不允许方法 并且 GET 根本不起作用 id RFC 2068 中未定义 且 Servlet API 不支持
  • C# .Net 中 XmlElement 中的空白

    XmlElement child doc CreateElement element Where doc是一个对象XmlDocument 当代码执行上面一行时element Tom and Jerry 我收到以下错误 The charact
  • Woocommerce 中的本地取货运输选项自定义百分比折扣

    我的 WooCommerce 结帐页面提供了一些运输选项 统一费率 需要花钱 本地取货 免费 如果客户选择本地取货运输方式 我如何才能获得订单总成本 5 的折扣 以下代码将为购物车小计添加 5 的折扣当地取货选择的运输方式 add acti
  • UWP 中的 Process.Start

    我想从我的 UWP 应用程序运行文件 视频 音乐 图片 对于 WPF 我可以使用Process Start path 方法 但此方法现在可用于 UWP 我发现我可能应该使用FullTrustProcessLauncher https lea
  • 在 ForEach-Object -Parallel 块内从自身递归调用函数 - 并行块内无法识别函数

    第一次在这里提问 请善待 我试图以并行方式递归地获取所有目录 希望减少遍历驱动器所需的时间 下面是我尝试过的代码 本质上我想要做的是输入一个文件夹 并对其子文件夹及其子文件夹等并行执行相同的操作 但该函数在并行块内无法识别 function
  • 用颜色向量突出显示 ggplot2 中的前 3 个

    我有下面的代码 我想用选定的颜色为前 3 个着色 提前谢谢了 library ggplot2 library dplyr df lt data frame dose c D0 5 D1 D2 D3 D4 D5 len c 4 2 10 29
  • 从Python字典中删除重复的键但对值求和

    我有一本Python字典 d tags 0 value tags 1 value tags 2 value tags 3 value tags 4 value 想象一下这个字典大了 10 倍 它有 50 个键和 50 个值 在此标签中可以找
  • 空 DataTable 到 Json 并包含列名称

    我的应用程序分为两部分 客户端和服务器 服务器端询问 SQL 数据库并将结果存储在 DataTable 中 然后我使用下一个函数将 DataTable 转换为 Json 以将其发送到客户端 问题是当没有结果时 我得到一个空字符串 我想得到一
  • 如何在 Neo4j 3.0.1 中配置查询超时

    我想设置查询超时neo4j conf对于 Neo4j 3 0 1 任何花费超过超时时间的查询都应该被终止 我主要关心的是为来自 Neo4j 浏览器的查询设置超时 看起来像这是可能的过去与 execution guard enabled tr
  • OpenCV:相对于参考图像移动/对齐面部图像(图像配准)

    我是 OpenCV2 的新手 正在从事情感识别项目 希望将面部图像与参考面部图像对齐 我希望在进行旋转之前先进行图像翻译 当前的想法是在 x 和 y 坐标的有限范围内运行搜索 并使用平方差之和作为误差度量来选择最佳的 x y 参数来对齐图像