OpenCV灰度图像平移和旋转算法(平面内)

2023-11-02

 旋转重心为图像中心;

为简化计算,旋转角度为int值,单位为度;

DIM_SAMPLE_POINTS_X, DIM_SAMPLE_POINTS_Y 为图像大小,建议为相等;

图像的x轴与实际坐标相等,而y轴方向相反,因此shift_y之前有个负号;

为了加快计算速度,常用度数的正弦和余弦值保存在数组VIEW_COS_LOOKUP中;

  float pos_x, pos_y;
  int pos_x1, pos_x2, pos_y1, pos_y2;
  float sum = 0.0;
  float center_x=(DIM_SAMPLE_POINTS_X-1)/2.0;
  float center_y=(DIM_SAMPLE_POINTS_Y-1)/2.0;
  float shift_x = shift(0)/SENSOR_RANGE/2.0*DIM_SAMPLE_POINTS_X;
  float shift_y = -shift(1)/SENSOR_RANGE/2.0*DIM_SAMPLE_POINTS_Y;
  std::vector<float> temp_new_data;
  temp_new_data.reserve(SAMPLE_POINTS_SIZE);
  for (int t_i = 0; t_i < SAMPLE_POINTS_SIZE; t_i++)//clear all temp data
    temp_new_data[t_i] = 0;
  for (int x = 0; x < DIM_SAMPLE_POINTS_X; x++)
  {
    for (int y = 0; y < DIM_SAMPLE_POINTS_Y; y++)
    {
      float data_xy = (temp_s_data)[x+y* DIM_SAMPLE_POINTS_X];
      if(data_xy>0.01)
      {
        pos_x = VIEW_COS_LOOKUP[rot]*(x-center_x) - (center_y-y)*VIEW_SIN_LOOKUP[rot] + center_x + shift_x;
        pos_y = center_y - VIEW_SIN_LOOKUP[rot]*(x-center_x) - (center_y-y)*VIEW_COS_LOOKUP[rot] + shift_y;
        if(pos_x<0 || pos_y<0 || pos_x> DIM_SAMPLE_POINTS_X-1 || pos_y>= DIM_SAMPLE_POINTS_Y-1) continue;
        pos_x1 = floor(pos_x);
        pos_x2 = ceil(pos_x);
        pos_y1 = floor(pos_y);
        pos_y2 = ceil(pos_y);
        double w_x, w_y;
        if(pos_x1==pos_x) w_x = 1.0;
        else w_x = pos_x2 - pos_x;
        if(pos_y1==pos_y) w_y = 1.0;
        else w_y = pos_y2 - pos_y;
    
        temp_new_data[pos_x1 + pos_y1 * DIM_SAMPLE_POINTS_X] += w_x * w_y * data_xy;
        temp_new_data[pos_x1 + pos_y2 * DIM_SAMPLE_POINTS_X] += w_x * (1 - w_y) * data_xy;
        temp_new_data[pos_x2 + pos_y1 * DIM_SAMPLE_POINTS_X] += (1 - w_x) * w_y * data_xy;
        temp_new_data[pos_x2 + pos_y2 * DIM_SAMPLE_POINTS_X] += (1 - w_x) * (1 - w_y) * data_xy;    

        sum += data_xy;
      }
    }
  }

下面为匹配算法, 数组中保存有历史数据,用于匹配

  float error = 0.0;
  std::vector<float> show_err_data;
  show_err_data.reserve(SAMPLE_POINTS_SIZE);//to show error data in window
  
  for (int t_i = 0; t_i < SAMPLE_POINTS_SIZE; t_i++)
  {
    error += abs(temp_new_data[t_i] - memory_sdata[t_i]);
    show_err_data[t_i] = abs(temp_new_data[t_i] - memory_sdata[t_i]);
  }
  
  return error/sum/2.0;
}

 

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

OpenCV灰度图像平移和旋转算法(平面内) 的相关文章

  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • 如何计算图像中的 RGB 或 HSV 通道组合?

    我使用 python opencv 加载形状为 30 100 3 的图像 现在想要按颜色计算所有颜色的频率 我不是指单个通道 而是指通道组合 含义 3 个频道列表 例如 255 0 0 表示红色 255 255 0 表示黄色 100 100
  • Python中最相似的人脸识别

    如何使用Python和OpenCV来查找面部相似 我已成功使用 OpenCV 和 Python 使用 Haar Cascades 从多张照片中提取人脸 我现在有一个图像目录 所有这些都是不同人的面孔 我想做的是拍摄一张样本图像 然后看看它最
  • 使用Python的工业视觉相机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我可以使用 openCV 比较两张不同图像上的两张脸吗?

    我对 openCV 很陌生 我看到它可以计算出脸部并返回一个矩形来指示脸部 我想知道 openCV 是否可以访问两张包含一张脸的图像 并且我希望 openCV 返回这两个人是否相同的可能性 Thanks OpenCV 不提供完整的人脸识别引
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • OpenCV IP 相机应用程序崩溃 [h264 @ 0xxxxx] 访问单元中缺少图片

    我在 cpp 中有一个 opencv 应用程序 它使用 opencv 的简单结构捕获视频流并将其保存到视频文件中 它与我的网络摄像头完美配合 但是 当我运行它从 IP 摄像机捕获流时 它可能会在大约十秒后崩溃 我的编译命令是 g O3 IP
  • OpenCV 错误:connectedComponents_sub1 中断言失败 (L.channels() == 1 && I.channels() == 1) [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 OpenCV python 中遇到以下错误 并用 google 搜索了很多 但无法解决 如果有人能为我提供一些线索
  • 如何确定与视频中物体的距离?

    我有一个从行驶中的车辆前面录制的视频文件 我将使用 OpenCV 进行对象检测和识别 但我停留在一方面 如何确定距已识别物体的距离 我可以知道我当前的速度和现实世界的 GPS 位置 但仅此而已 我无法对我正在跟踪的对象做出任何假设 我计划用
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • Opencv Mat内存管理

    内存管理对于图像类至关重要 在opencv中 图像类是cv Mat 它有一个微妙的内存管理方案 假设我已经有了自己的图像类SelfImage class SelfImage public int width int height unsig
  • 将 4 通道图像转换为 3 通道图像

    我正在使用 OpenCV 2 4 6 我正在尝试将 4 通道 RGB IplImage 转换为 4 通道 HSV 图像 下面是我的代码 给出错误 OpenCV 错误 未知函数断言失败 我认为 cvCvtColor 支持 3 通道图像 有没有
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow

随机推荐

  • 7天学习opengl入门

    10月13号下午3 00队长给我开了一个会 10 14号开始学习opengl 今天10月21号 期间 虽然有时候课程很满 但每天都至少写一个程序 当然 这些只是我7天来业余时间的学习 我觉得这个网址不错 大家如果也想学习opengl 并且具
  • 将UTC时间格式转换成东八区时间格式

    在前后端数据接口通信中 后台返回的时间往往是 UTC 格式的 即2022 12 15T10 28 57 000 00 00这种 作为前端 我们需要将其转换为标准的本地格式 并用 YYYY MM DD HH mm ss 这种格式呈现给用户 用
  • 哈工大2018秋高级语言程序设计课程大作业

    Github文件下载地址哈工大2018秋高级语言程序设计课程 高级语言程序设计 实验大作业反思报告 实验大作业题目 智能趣味电子通讯录 类型 信息管理系统 学生姓名 郭茁宁 班 号 1837101 学 号 1183710109 所在院系 计
  • 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(15)

    今天测试的时候又出现了一个问题 在查看科室库的出库列表时 网页上会报出500的错误 即参数错误 但是出库的所有信息都能正确的在上面显示 同样的问题在下订单后查看订单 以及配送后查看配送列表时出现了 而这个问题在代码几乎完全一样的中心库那里却
  • Android Studio 下真机调试

    文章目录 一 开启真机调试 二 断开真机调试 一 开启真机调试 准备USB调试线 一端插在电脑USB接口上 另一端插在手机充电口上 下面以自己的手机 huawei nova 5 为例 点击手机界面上的设置应用 然后往下找到 关于手机 点击进
  • ElasticSearch-IK分词器介绍和下载

    IK分词器 什么是IK分词器 分词 把一段中文或者别的划分成一个一个的关键字 我们在搜索的时候会把自己的信息进行分词 会把数据库中或者索引库中的数据进行分词 然后进行一个匹配操作 默认的中文分词是将每个字看成一个词 比如 我爱魏一鹤 会被分
  • 步进电机基础(2.4)- HB型步进电机的转子齿数与主极数之间的关系

    步进电机基础 2 4 HB型步进电机的转子齿数与主极数之间的关系 前言 基本信息 公式 前言说明 HB型步进电机的转子齿数与主极数之间的关系 1 HB步进电机的相数 转子齿数 主极数之间的表达式 2 相内磁路的一般表达式 3 相间磁路的一般
  • pdf太大了如何压缩?这四种方法快来尝试下吧

    pdf太大了如何压缩 我们都知道 大型PDF文件会占据较多的存储空间 特别是当需要处理和存储大量PDF文件时 而我们通过压缩PDF文件 能够在很大程度上缩减文件大小 进而便于文件的传输 备份和存储 另外 在某些情况下 存储和传输设备 如移动
  • 献给阿尔吉侬的花束( 入门级bfs查找 + 模版解读 + 错误示范)

    献给阿尔吉侬的花束问题 文章目录 献给阿尔吉侬的花束问题 前言 题目描述 题目分析 方法判定 bfs 算法模版介绍 两个数组 记录地图 记录移动距离 一个队列 依次遍历所有接触到的点 一次遍历 模版代码如下 题解代码 错误示范 总结 前言
  • 【Java8 新特性 3】Supplier简介

    在Java8中增加的接口Supplier 最适合用于表示工厂 带有Supplier的方法 通常应该限制输入工厂的类型参数使用有限制的通配符类型 以便客户端能够传入一个工厂 来创建指定类型的任意子类型 应该将这些资源或者工厂传给构造器 或者静
  • JavaFX 基础介绍

    目录 JavaFX 基础介绍 代码介绍 整体结构 场景面板介绍 FlowPane流失布局 BorderPane边框布局 控件介绍 Label 文本标签 TextField 输入框 PasswordField Button 按钮 按钮的点击事
  • Linux命令:traceroute命令(路由跟踪)

    traceroute是用来检测发出数据包的主机到 标主机之间所经过的网关数量的工具 traceroute的原理是试图以最小的TTL 存活时间 发出探测包来跟踪数据包到达目标主机所经过的网关 然后监听 个来自网关ICMP的应答 发送数据包的大
  • 简历造假,你以为我不知道?

    本文共 3495字 预估阅读时间 9分钟 前言 上到职场干将下到职场萌新 都会接触到包装简历这个词语 当你简历投到心仪的公司 公司内负责求职的工作人员是如何甄别简历的包装程度的 Coody老师根据自己的经验写下了这篇文章 谁都不是天才 包装
  • 负载均衡的三种实现方式

    不懂高性能的负载均衡设计 架构师带你飞 在软件系统的架构设计中 对集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案 负载均衡本质上是用于将用户流量进行均衡减压的 因此在互联网的大流量项目中 其重要性不言而喻 一 什么是负载均衡 早
  • 由一次mycat+mysql水平拆分集群问题引发的思考

    近段时间部署和测试了一个mycat 4 Percona tokudb的水平拆分集群 前段应用是将一类奖状数据不断地写入到这个库中 只有insert操作 前几天运行状态还比较好 从昨天开始 由于业务量突然增加了一些 磁盘IO负载变得很高 而且
  • 嵌入式系统设计学习笔记1

    一 计算机架构 1 计算机架构主要有两种 哈佛架构 冯诺依曼架构 冯诺依曼的核心是 存储程序 顺序执行 规定计算机必须具有如下功能 1 把需要的程序和数据送至计算机中 2 必须具有长期记忆程序 数据 中间结果及最终运算结果的能力 3 能够完
  • 【一个常规的算法,最长公共前缀,Python】

    TOC 给定一串字符串 要求提取其中重复率最高的字符串 不包含单字符串 思路分析 采取分段进行遍历的方式 达到出现所有情况为止 给定 abcabc 固出现情况为 ab 2 bc 2 abc 2 ca 1 bca 1 cab 1 abca 1
  • QGridLayout::addWidget 的使用详解

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 QGridLayout addWidget 二 使用步骤 1 第一个版本 2 第二个版本 参考 前言 Qt中经常使用网格布局QGridLayout 并在网格中依次加入控件 我们可以依次
  • java从入门到劝退超级详细超级底层的入门教学脚踩面试官拳打HR全体起立

    java从入门到劝退超级详细的入门教学全体起立 一 对你有帮助的话记得一键三连哦 前言 1995 5 23 sun推出的一款面向对象1995 5 23 sun推出的一款面向对象的编程语言 的编程语言 java程序要有java环境才能运行所以
  • OpenCV灰度图像平移和旋转算法(平面内)

    旋转重心为图像中心 为简化计算 旋转角度为int值 单位为度 DIM SAMPLE POINTS X DIM SAMPLE POINTS Y 为图像大小 建议为相等 图像的x轴与实际坐标相等 而y轴方向相反 因此shift y之前有个负号