www.cnblogs.com Open in urlscan Pro
121.40.43.188  Public Scan

URL: https://www.cnblogs.com/yanghailin/p/12088204.html
Submission: On July 27 via manual from SG — Scanned from DE

Form analysis 1 forms found in the DOM

GET https://zzk.cnblogs.com/s

<form id="zzk_search" class="navbar-search" action="https://zzk.cnblogs.com/s" method="get" role="search">
  <input name="w" id="zzk_search_input" placeholder="代码改变世界" type="search" tabindex="3">
  <button type="submit" id="zzk_search_button">
    <img src="/images/aggsite/search.svg" alt="搜索">
  </button>
</form>

Text Content

 * 
 * 首页
 * 新闻
 * 博问
 * 专区
 * 闪存
 * 班级

 * 
 * 我的博客 我的园子 账号设置 简洁模式 ... 退出登录
   注册 登录


无左无右




 * 博客园
 * 首页
 * 新随笔
 * 联系
 * 订阅
 * 管理

随笔 - 175  文章 - 1  评论 - 23  阅读 - 16万


OPENCV REMAP函数测试 REMAP()简单重映射



重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。
为了完成映射过程, 我们需要获得一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的。
一般情况下,我们通过重映射来表达每个像素的位置 (x,y),
像这样 : g(x,y) = f ( h(x,y) )
在这里, g( ) 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数。
在OpenCV中,我们用函数remap( )来实现简单重映射。


C++: 
void remap(InputArray src, //输入图像
           OutputArraydst, //输出图像
           InputArray map1,//第一个映射
           InputArray map2, //第二个映射
           int interpolation, //插值
           intborderMode=BORDER_CONSTANT, 
           const Scalar& borderValue=Scalar()
           )


第三个参数,InputArray类型的map1,它有两种可能的表示对象:
表示点(x,y)的第一个映射。
表示CV_16SC2 , CV_32FC1 或CV_32FC2类型的X值。

第四个参数,InputArray类型的map2,同样,它也有两种可能的表示对象,而且他是根据map1来确定表示那种对象。
若map1表示点(x,y)时。这个参数不代表任何值。
表示CV_16UC1 , CV_32FC1类型的Y值(第二个值)。

第五个参数,int类型的interpolation,插值方式,之前的resize( )函数中有讲到,需要注意,resize( )函数中提到的INTER_AREA插值方式在这里是不支持的,所以可选的插值方式如下:
    INTER_NEAREST - 最近邻插值
    INTER_LINEAR – 双线性插值(默认值)
    INTER_CUBIC – 双三次样条插值(逾4×4像素邻域内的双三次插值)
    INTER_LANCZOS4 -Lanczos插值(逾8×8像素邻域的Lanczos插值)

第六个参数,int类型的borderMode,边界模式,有默认值BORDER_CONSTANT,表示目标图像中“离群点(outliers)”的像素值不会被此函数修改。

第七个参数,const Scalar&类型的borderValue,当有常数边界时使用的值,其有默认值Scalar( ),即默认值为0。


.pro文件

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += main.cpp

OPENCV_ROOT_PATH = /home/yhl/software_install/opencv3.2



INCLUDEPATH += $${OPENCV_ROOT_PATH}/include \
               $${OPENCV_ROOT_PATH}/include/opencv \
               $${OPENCV_ROOT_PATH}/include/opencv2

LIBS += -L$${OPENCV_ROOT_PATH}/lib

LIBS += -lopencv_core \
        -lopencv_highgui \
        -lopencv_imgproc \
        -lopencv_imgcodecs \
        -lopencv_videoio \
        -lopencv_calib3d


//-----------------------------------【头文件包含部分】---------------------------------------
//       描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/imgproc/imgproc.hpp"
#include <iostream>

//-----------------------------------【命名空间声明部分】--------------------------------------
//    描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;

//-----------------------------------【main( )函数】--------------------------------------------
//    描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-----------------------------------------------------------------------------------------------
int main( )
{
    //【0】变量定义
    Mat srcImage, dstImage;
    Mat map_x, map_y;

    //【1】载入原始图
    srcImage= imread( "/data_2/everyday/1223/dog.jpeg", 1 );
    if(!srcImage.data) { printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false; }
    namedWindow("原始图",0);
    imshow("原始图",srcImage);

    //【2】创建和原始图一样的效果图,x重映射图,y重映射图
    dstImage.create(srcImage.size(), srcImage.type() );
    map_x.create(srcImage.size(), CV_32FC1 );
    map_y.create(srcImage.size(), CV_32FC1 );

    //【3】双层循环,遍历每一个像素点,改变map_x & map_y的值
    for(int j = 0; j < srcImage.rows;j++)
    {
        for(int i = 0; i < srcImage.cols;i++)
        {
            //改变map_x & map_y的值.
            map_x.at<float>(j,i)= static_cast<float>(srcImage.cols - i);
            map_y.at<float>(j,i)= static_cast<float>(j);
        }
    }

    //【4】进行重映射操作
    remap(srcImage, dstImage, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0,0,0) );

    //【5】显示效果图
    namedWindow("remap",0);
    imshow("remap", dstImage );
    waitKey();

    return 0;
}


测试图片如下,治愈系的小奶狗,_


好记性不如烂键盘---点滴、积累、进步!

分类: 编程技术
好文要顶 关注我 收藏该文
无左无右
粉丝 - 12 关注 - 6



+加关注
0
0



« 上一篇: tensorflow学习
» 下一篇: opencv 最小二乘法拟合曲线
posted @ 2019-12-23 20:30  无左无右  阅读(3301)  评论(0)  编辑  收藏  举报

刷新评论刷新页面返回顶部
登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页

【推荐】下一步,敏捷!| 助力远程办公走向成功系列讲座



编辑推荐:
· 技术管理杂谈
· 使用 Three.js 实现炫酷的赛博朋克风格 3D 数字地球大屏
· 聊聊 Redis 是如何进行请求处理
· 基于 ABP 实现 DDD--领域服务、应用服务和 DTO 实践
· 从全局角度,如何设计一个秒杀系统?


最新新闻:
· 造谣试驾车断轴?"大V"向理想汽车道歉:未调查清楚,疑遭人下套
· 我在英国TikTok做直播电商 | 霞光出海人
· HarmonyOS 3正式发布,6大特性,9月规模升级
· IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
· 80万亿元宇宙市场,Meta和苹果抢疯了!
» 更多新闻...



公告

昵称: 无左无右
园龄: 5年9个月
粉丝: 12
关注: 6
+加关注


< 2022年7月 >

日 一 二 三 四 五 六 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6


搜索

 
 


常用链接

 * 我的随笔
 * 我的评论
 * 我的参与
 * 最新评论
 * 我的标签


我的标签

 * python(2)
 * 透视校正(1)
 * 透视变换(1)
 * Ground Truth(1)
 * ICDAR2015(1)
 * 格式化(1)
 * coco(1)


随笔分类

 * leedcode(1)
 * linux 命令(5)
 * note(2)
 * opencv(2)
 * python(32)
 * pytorch(36)
 * tensorflow(2)
 * tensorrt(2)
 * 编程技术(40)
 * 积累(23)
 * 目标检测(13)
 * 深度学习(37)
 * 问题记录(19)


随笔档案

 * 2022年7月(4)
 * 2022年6月(3)
 * 2022年5月(5)
 * 2022年4月(2)
 * 2022年3月(4)
 * 2022年2月(3)
 * 2022年1月(5)
 * 2021年12月(1)
 * 2021年11月(4)
 * 2021年10月(11)
 * 2021年9月(7)
 * 2021年8月(2)
 * 2021年7月(2)
 * 2021年6月(10)
 * 2021年5月(13)
 * 2021年4月(6)
 * 2021年3月(4)
 * 2021年2月(2)
 * 2021年1月(4)
 * 2020年12月(2)
 * 2020年11月(3)
 * 2020年10月(1)
 * 2020年9月(2)
 * 2020年8月(4)
 * 2020年7月(2)
 * 2020年6月(4)
 * 2020年5月(4)
 * 2020年4月(4)
 * 2020年3月(7)
 * 2020年2月(3)
 * 2020年1月(4)
 * 2019年12月(7)
 * 2019年11月(4)
 * 2019年10月(1)
 * 2019年9月(8)
 * 2019年8月(3)
 * 2019年7月(14)
 * 2019年6月(6)
 * 更多


阅读排行榜

 * 1. libtorch 常用api函数示例(史上最全、最详细)(23415)
 * 2. python matplotlib.pyplot 显示图像(9646)
 * 3. 可变形卷积 deformable convolution 学习记录(9125)
 * 4. c++ 文件/文件夹操作(7123)
 * 5. opencv图像拼接(6009)


评论排行榜

 * 1. Real-time Scene Text Detection with Differentiable Binarization 问题记录(5)
 * 2. 透视变换--点对应变换(3)
 * 3. DB/DBNet:Real-time Scene Text Detection with Differentiable Binarization
   一些问题(3)
 * 4. voc分割数据集 pil调色板(2)
 * 5. ubuntu 源码编译libtorch(2)


推荐排行榜

 * 1. libtorch 常用api函数示例(史上最全、最详细)(4)
 * 2. 可变形卷积 deformable convolution 学习记录(2)
 * 3. opencv 以及 c++ 函数(2)
 * 4. ssd loss详解(1)
 * 5. L2norm 层tensorrt api实现(1)


最新评论

 * 1. Re:目标检测---refinedet

 * 优秀

 * --四海潮声
 * 2. Re:ssd loss详解

 * 文章写的真好

 * --谷阿幻
 * 3. Re:ubuntu 源码编译libtorch
 * @guyanij6 不需要...
 * --无左无右
 * 4. Re:crnn pytorch 训练、测试

 * 赞一个

 * --极客说_范儿
 * 5. Re:ubuntu 源码编译libtorch
 * export CMAKE_PREFIX_PATH=\({CONDA_PREFIX:-"\)(dirname $(which conda))/../"}
   提示缺少dirname,请问要自己写路径嘛?...
 * --guyanij6



Copyright © 2022 无左无右
Powered by .NET 6 on Kubernetes