opencv —— remap 重映射
重映射的概念
重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。
实现重映射:remap 函数
将图像进行重映射几何变换,基于的公式为:dst (x, y) = src ( mapx (x, y), mapy (x, y) )。即 mapx 在(x,y)位置上存储的是目标像素的横坐标,mapy 在(x,y)位置上存储的是目标像素的纵坐标。
void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode = BORDER_CONSTANT, const Scalar& borderValue = Scalar());
- src,输入图像,即源图像,填灰度图或真彩图均可。
- dst,输出图像,需要和源图像有一样的尺寸和类型。
- map1,即 mapx。
- map2,即 mapy 。
- interpolation,插值方法。插值就是根据已知数据点(条件),来预测未知数据点值得方法。在重映射过程中,图像的大小可能发生改变。此时像素与像素之间的关系就不是一一对应关系,因此在重映射过程中,可能会涉及到像素值的插值计算。可选插值方式如下:
INTER_NEAREST(最近邻差值)
INTER_LINEAR(双线性插值,一般选择这种方式)
INTER_CUBIC(双三次样条插值,超过 4×4 像素邻域内的双三次插值)
INTER_LANCZOS4(Lanczos 插值,超过 8×8 像素邻域的 Lanczos 插值)
- borderMode,边界扩展类型。默认值为 BORDER_CONSTANT,详解链接:https://www.cnblogs.com/bjxqmy/p/12306276.html
- borderValue ,只有当 borderMode取值为 BORDER_CONSTANT 时,这个参数才会被使用,边界会被填充成 borderValue 指定的颜色。
代码示例:
#include<opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
Mat src;
int choice = ;
void change_choice(int, void*) {
Mat dst;
Mat x_map = Mat(src.size(), CV_32FC1), y_map = Mat(src.size(), CV_32FC1);
for (int i = ; i < src.rows; i++) {
float* x_rows = x_map.ptr<float>(i);
float* y_rows = y_map.ptr<float>(i);
for (int j = ; j < src.cols; j++) {
switch (choice){
case ://180°旋转
x_rows[j] = static_cast<float>(src.cols - j);
y_rows[j] = static_cast<float>(src.rows - i);
break;
case ://缩小为原来的 1/2
if (j > src.cols*0.25&&j<src.cols*0.75&&i>src.rows*0.25&&i < src.rows*0.75) {
x_rows[j] = static_cast<float>( * (j - src.cols*0.25));
y_rows[j] = static_cast<float>( * (i - src.rows*0.25));
}
break;
}
}
}
remap(src, dst, x_map, y_map, INTER_LINEAR);
imshow("dst", dst);
}
int main() {
src = imread("C:/Users/齐明洋/Desktop/1.jpg");
imshow("src", src); namedWindow("dst");
createTrackbar("choice", "dst", &choice, , change_choice);
change_choice(, );
waitKey();
}
效果演示:


借鉴博客:https://www.cnblogs.com/HL-space/p/10546595.html
https://blog.csdn.net/weixin_39746114/article/details/82467458
opencv —— remap 重映射的更多相关文章
- opencv之重映射
好久没写呆码了 今天发个重映射 #include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgpr ...
- C++ Opencv remap()重映射函数详解及使用示例
一.重映射及remap()函数介绍 重映射,就是把一幅图像中某位置的像素放置到另一图像指定位置的过程.即: 在重映射过程中,图像的大小也可以同时发生改变.此时像素与像素之间的关系就不是一一对应关系,因 ...
- opencv::像素重映射
像素重映射(cv::remap) 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像. Remap( InputArray src, // 输入图像 Ou ...
- OpenCV函数 重映射
重映射是什么意思? 把一个图像中一个位置的像素放置到另一个图片指定位置的过程. 为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的. 我们通过重映射来 ...
- 【OpenCV新手教程之十七】OpenCV重映射 & SURF特征点检測合辑
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...
- OpenCV探索之路(八):重映射与仿射变换
重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...
- OpenCV——重映射、仿射变换
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...
- OpenCV学习笔记(九) 重映射、仿射变换
重映射 通过重映射来表达每个像素的位置 : 这里 是目标图像, 是源图像, 是作用于 的映射方法函数.想象一下我们有一个图像 , 我们想满足下面的条件作重映射:,图像会按照 轴方向发生翻 ...
- opencv 5 图像转换(3 重映射 仿射变换 直方图均衡化)
重映射 实现重映射(remap函数) 基础示例程序:基本重映射 //---------------------------------[头文件.命名空间包含部分]------------------- ...
随机推荐
- HTML 中清除浮动
html中如何清除浮动 在html中,浮动可以说是比较常用的.在页面的布局中他有着很大的作用,但是浮动中存在的问题也是比较多的.现在我们简单说一下怎么去除浮动 首先我们先简单的看一下浮动: 首先我 ...
- C++从array数组向vector向量复制元素的两种方式
#include <iostream> #include <vector> using namespace std; int main() { const int arr_si ...
- python下的selenium和chrome driver的安装
selenium是一款支持多种语言.多种浏览器.多个平台的开源web自动化测试软件,测试人员可用python.java等语言编写自动化脚本,使得浏览器可以完全按照你的指令运行,大大节省了测试人员用鼠标 ...
- alert弹出窗口,点击确认后关闭页面
alert("点击确认后,关闭页面"); window.opener=null;window.top.open('','_self','');window.close(this);
- 那些 JavaScript 自带的奇妙 Bug
米娜桑,哦哈哟~ 本章讲解关于 JavaScript 奇妙的 Bug,与其说是Bug,不如说是语言本身隐藏的奥秘.接下来就看看可能会影响到我们编程的那些Bug吧. typeof null === &q ...
- Dubbox 环境搭建-新(Windows下)
分布式服务框架 dubbo/dubbox 入门示例 dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http:// ...
- Windows API 教程(九) 网络编程
茵蒂克丝 基础概念 ip 地址 服务端与客户端 Socket 基础概念 头文件和库文件 常用函数 WSAStartup ( ) 函数 WSACleanup ( ) 函数 Socket ( ) 函数 c ...
- nginx+lua在我司的实践
导读:nginx是一个高性能的反向代理服务器,lua是一个小巧的脚本语言,这两个的巧妙结合会擦出怎样的火花呢. 关键词:nginx,lua,nginx+lua 前言 nginx,lua,nginx+l ...
- MybatisDao
一.mybatisDao的编写(原始方式,不用) 1.接口编写 public interface UserDao { public void save(User user); public User ...
- 用赋值表达式作为bool值
enum Status { stOk, stQuit, stError }; int main() { Status status; int n; bool b1 = (status = stOk); ...