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灰度图像平移和旋转算法(平面内) 的相关文章

  • 从 PyCharm IDE 运行 Django 项目时出现“ImportError:没有名为 cv2 的模块”

    我正在从 PyCharm 运行一个 Django 项目 其配置设置为使用 virtualenv 中的 Python 解释器 该解释器依赖于 opencv 当我运行时 该网站在本地运行良好django admin py runserver 但
  • 在OpenCV Python中编写4通道以上图像

    这对我来说是一个持续的挑战 我正在尝试使用 openCV 将两个 3 RGB 图像组合成一个 6 通道 TIFF 图像 到目前为止我的代码如下 import cv2 import numpy as np im1 cv2 imread im1
  • 如何使用 python cv2 api 将 xy 点格式化为 unactorPoints?

    我在格式化要传递给 unactorPoints 的 x y 点列表时遇到问题 opencv 2 4 1 该错误消息是 C 特定的 并抱怨点数组不是 CV 32FC2 类型 我不应该能够传入 Nx2 numpy 数组吗 import cv2
  • 使用 openCV 锐化视频图像

    我想使用 OpenCV 锐化我的图像 我在网上查看了一个示例 该示例正在对灰度图像执行锐化 我尝试了它 它工作得很好 然而 我现在尝试做同样的事情 但使用 RGB 颜色 所以我分别在三个通道上执行相同的功能 但它没有给我任何结果 图像与原始
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • 针对不同相机(RGB 和红外)的 StereoCalibrate

    我在校准两个摄像头时遇到问题 第一个是 RGB 第二个是红外 它们有不同的分辨率 我调整了大小并裁剪了更大的图像 焦距等等 例子 RGB 1920x1080 Infrared 512x424 如何相互校准它们 我应该在stereoCalib
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind
  • 有没有办法检测图像是否模糊? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道是否有一种方法可以通过分析图像数据来确定图像是否模糊 估计图像清晰度的另一种非常简单的方法是使用拉普拉斯 或 LoG 滤波器并
  • 如何将图像从 np.uint16 转换为 np.uint8?

    我正在创建一个图像 image np empty shape height width 1 dtype np uint16 之后我将图像转换为 BGR 模型 image cv2 cvtColor image cv2 COLOR GRAY2B
  • 将线性数组转换为二维矩阵

    我有一个浮点指针 数组 它代表一个图像 它的元素计数和索引具有宽度 高度 图像不像矩阵 其原点位于左上角 相反 它的原点位于左下角 就像在笛卡尔坐标系中一样 达到最大宽度后 它从左侧开始下一行 所以我想有效地将 这个数组转换为二维矩阵 可选
  • OpenCV Android - 无法解析相应的JNI函数

    我正在尝试按照此处概述的本教程使用 Opencv 设置 Android Studio https www youtube com watch v OTw GIQNbD8 https www youtube com watch v OTw G
  • OpenCV 机器学习算法的 CSV 格式

    OpenCV 中的机器学习算法似乎使用以 CSV 格式读取的数据 参见示例这个 cpp文件 https code ros org trac opencv browser trunk opencv samples c tree engine
  • 使用 SURF 在检测到的对象周围绘制矩形

    我正在尝试从涉及冲浪检测器的以下代码中检测对象 我不想绘制匹配项 我想在检测到的对象周围绘制一个矩形 但不知何故我无法获得正确的单应性 请任何人指出在哪里我走错了 include
  • 警告:发生了非法反射访问操作(java 中的便携式 opencv)

    我想做一个便携的opencv将依赖项添加到 maven 文件的应用程序pom xml 简化的代码是 import org opencv core Mat public class Builder public static void mai
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 如何识别与我的对象相关的轮廓并找到它们的几何质心

    问题陈述和背景信息 EDIT 约束 法兰上的红色会随着时间的推移而变化 所以我此时不会尝试使用颜色识别来识别我的对象 除非它足够强大 此外 外部照明也可能是一个因素 因为将来这将是在室外区域 我有 RGB 深度相机 有了它 我就能捕捉到这个
  • 如何将 Opencv VideoWriter 与 GStreamer 结合使用?

    我正在尝试使用 Opencv VideoWriter 传输 h264 流 以使用 VideoCapture 将其传输到网络上的另一台电脑上 但是 我被困在 VideoWriter 上 执行此代码会返回错误 并且 out isOpened 始

随机推荐

  • 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之前有个负号