当前位置: 首页 > news >正文

苏州网站设计多少钱域名检测查询

苏州网站设计多少钱,域名检测查询,自己的网站就可以做app,桂林做手机网站什么是重映射? 重映射(Remapping)是图像处理中的一种操作,用于将图像中的像素从一个位置映射到另一个位置。重映射可以实现图像的平移、旋转、缩放和透视变换等效果。它是一种基于像素级的图像变换技术,可以通过定义映…

什么是重映射?

重映射(Remapping)是图像处理中的一种操作,用于将图像中的像素从一个位置映射到另一个位置。重映射可以实现图像的平移、旋转、缩放和透视变换等效果。它是一种基于像素级的图像变换技术,可以通过定义映射关系来改变图像的几何形状和外观。

在重映射中,我们需要定义一个映射表(Map),这个映射表指定了源图像中每个像素点在目标图像中的位置。对于每个像素点 (x, y),映射表告诉我们在目标图像中的新位置 (x’, y’)。通过对所有像素点进行映射,我们就可以得到经过重映射变换后的新图像。

在OpenCV中,可以使用 cv2.remap() 函数来执行重映射操作。cv2.remap() 接受输入图像和一个表示映射关系的两个浮点型数组(map_x 和 map_y)。数组 map_x 和 map_y 的大小必须与输入图像的大小相同,并且每个元素 (x, y) 表示源图像中的像素点 (x, y) 在目标图像中的新位置 (x’, y’)。

重映射应用场景?

重映射在图像处理和计算机视觉领域有许多应用场景。以下是一些常见的重映射应用场景:

图像畸变校正:相机镜头引起的畸变(如透视畸变、鱼眼畸变等)会导致图像中的直线弯曲或形状失真。通过重映射技术,可以校正这些畸变,使图像看起来更加自然和真实。

图像配准:在多幅图像中找到对应点,并将它们对齐,使得它们在相同视角或坐标系下表现一致。这在图像拼接、全景图像合成和多视角图像处理中非常有用。

图像稳定:在视频处理中,当相机存在抖动或运动时,可以使用重映射技术来稳定视频,保持图像内容相对稳定,减少抖动效应。

视角变换:通过重映射,可以改变图像的视角,实现缩放、旋转、平移和透视等效果,从而得到不同角度或大小的图像。

增强现实 (AR) 应用:在AR应用中,通过对现实世界图像进行重映射,将虚拟物体或信息叠加到真实世界中,实现真实与虚拟的交互效果。

图像处理与滤波:重映射技术可以应用于图像处理中的滤波、图像增强和特效处理,从而实现各种图像变换和处理效果。

视频流处理:在实时视频流处理中,可以使用重映射技术对图像进行实时变换和校正,以满足特定的需求。

这些只是重映射在图像处理和计算机视觉中的一些常见应用场景。实际上,重映射技术非常灵活和强大,可以在许多不同的领域中发挥重要作用,帮助我们处理和改善图像数据。

映射参数的理解

OpenCV 内的重映射函数 cv2.remap()提供了更方便、更自由的映射方式,其语法格式如下:

dst = cv2.remap( src, map1, map2, interpolation[, borderMode[, borderValue]] )

式中:
 dst 代表目标图像,它和 src 具有相同的大小和类型。
 src 代表原始图像。
 map1 参数有两种可能的值:
 表示(x,y)点的一个映射。
 表示 CV_16SC2 , CV_32FC1, CV_32FC2 类型(x,y)点的 x 值。
 map2 参数同样有两种可能的值:
 当 map1 表示(x,y)时,该值为空。
 当 map1 表示(x,y)点的 x 值时,该值是 CV_16UC1,
CV_32FC1 类型(x,y)点的 y 值。
 Interpolation 代表插值方式
 borderMode 代表边界模式。当该值为 BORDER_TRANSPARENT 时,表示目标图像内
的对应源图像内奇异点(outliers)的像素不会被修改。
 borderValue 代表边界值,该值默认为 0。

重映射通过修改像素点的位置得到一幅新图像。在构建新图像时,需要确定新图像中每个像素点在原始图像中的位置。因此,映射函数的作用是查找新图像像素在原始图像内的位置。该过程是将新图像像素映射到原始图像的过程,因此被称为反向映射。在函数 cv2.remap()中,参数 map1 和参数 map2 用来说明反向映射,map1 针对的是坐标 x,map2 针对的是坐标 y。

需要说明的是,map1 和 map2 的值都是浮点数。因此,目标图像可以映射回一个非整数的值,这意味着目标图像可以“反向映射”到原始图像中两个像素点之间的位置(当然,该位置是不存在像素值的)。这时,可以采用不同的方法实现插值,函数中的 interpolation 参数可以控制插值方式。正是由于参数 map1 和参数 map2 的值是浮点数,所以通过函数 cv2.remamp()所能实现的映射关系变得更加随意,可以通过自定义映射参数实现不同形式的映射。

需要注意的是,函数 cv2.remap()中参数 map1 指代的是像素点所在位置的列号,
参数 map2 指代的是像素点所在位置的行号。例如,我们想将目标图像(映射结果图像)中某个点 A 映射
为原始图像内处于第 0 行第 3 列上的像素点 B,那么需要将 A 点所对应的参数 map1 对应位置上的值设为 3,参数 map2 对应位置上的值设为 0。

所以,通常情况下,我们将 map1 写为 mapx,并且将 map2 写成 mapy,以方便理解。

同样,如果想将目标图像(映射结果图像)中所有像素点都映射为原始图像内处于第 0 行
第 3 列上的像素点 B,那么需要将参数 map1 内的值均设为 3,将参数 map2 内的值均设为 0。

实验:

使用 cv2.remap()完成数组映射,将目标数组内的所有像素点都映射为原始图像内第 0 行第 3 列上的像素点,以此来了解函数 cv2.remap()内参数 map1 和 map2 的使
用情况。
根据题目要求,可以确定:

 用来指定列的参数 map1(mapx)内的值均为 3。
 用来指定行的参数 map2(mapy)内的值均为 0。

import cv2
import numpy as np
img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
rows,cols=img.shape
mapx = np.ones(img.shape,np.float32)*3
mapy = np.ones(img.shape,np.float32)*0
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
print("img=\n",img)
print("mapx=\n",mapx)
print("mapy=\n",mapy)
print("rst=\n",rst)

运行结果:

img=[[253  90  32  65 181][187 184 148  12 212][157 229 255 138 115][156  38  62  89 241]]
mapx=[[3. 3. 3. 3. 3.][3. 3. 3. 3. 3.][3. 3. 3. 3. 3.][3. 3. 3. 3. 3.]]
mapy=[[0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.][0. 0. 0. 0. 0.]]
rst=[[65 65 65 65 65][65 65 65 65 65][65 65 65 65 65][65 65 65 65 65]]

通过观察上述结果可知,目标图像(数组)dst 内的所有值都来源于原始图像中第 0 行第 3
列上的像素值 65。

复制

为了更好地了解重映射函数 cv2.remap()的使用方法,本节介绍如何通过该函数实现图像的复制。在映射时,将参数进行如下处理:

 将 map1 的值设定为对应位置上的 x 轴坐标值。
 将 map2 的值设定为对应位置上的 y 轴坐标值。

通过上述处理后,可以让函数 cv2.remap()实现图像复制。下面通过一个例题来观察实现复
制时,如何设置函数 cv2.remap()内的 map1 和 map2 参数的值。

使用函数 cv2.remap()完成数组复制,了解函数 cv2.remap()内参数 map1和 map2 的使用情况。

这里为了方便理解,将参数 map1 定义为 mapx,将参数 map2 定义为 mapy。后续程序中都采用了这种定义方式,后面不再重复说明。

import cv2
import numpy as np
img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
rows,cols=img.shape
mapx = np.zeros(img.shape,np.float32)
mapy = np.zeros(img.shape,np.float32)
for i in range(rows):for j in range(cols):mapx.itemset((i,j),j)mapy.itemset((i,j),i)
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
print("img=\n",img)
print("mapx=\n",mapx)
print("mapy=\n",mapy)
print("rst=\n",rst)

运行程序,出现如下结果:

img=[[151 137  24  88 216][  8 112 205 130  44][ 78 106   1 134  85][190  55 135  56  64]]
mapx=[[0. 1. 2. 3. 4.][0. 1. 2. 3. 4.][0. 1. 2. 3. 4.][0. 1. 2. 3. 4.]]
mapy=[[0. 0. 0. 0. 0.][1. 1. 1. 1. 1.][2. 2. 2. 2. 2.][3. 3. 3. 3. 3.]]
rst=[[151 137  24  88 216][  8 112 205 130  44][ 78 106   1 134  85][190  55 135  56  64]]

通过本例可以观察到,参数 mapx 和参数 mapy 分别设置了 x 轴方向的坐标和 y 轴方向的
坐标。函数 cv2.remap()利用参数 mapx、mapy 所组成的数组构造的映射关系实现了图像的复制。
例如,rst 中的像素点[3,4]在 src 内的 x、y 轴坐标如下:
 x 轴坐标取决于 mapx 中 mapx[3,4]的值,为 4。
 y 轴坐标取决于 mapy 中 mapy[3,4]的值,为 3。

这说明 rst[3,4]来源于原始图像 src 的第 4 列(x 轴方向,由 mapx[3,4]决定)、第 3 行(y
轴方向,由 mapy[3,4]决定),即 rst[3,4]=src[3,4]。原始对象 src[3,4]的值为 64,所以目标对象
rst[3,4]的值为 64。

像绕 x 轴的翻转

import cv2
import numpy as np
img=cv2.imread("lena.png")
rows,cols=img.shape[:2]
mapx = np.zeros(img.shape[:2],np.float32)
mapy = np.zeros(img.shape[:2],np.float32)
for i in range(rows):for j in range(cols):mapx.itemset((i,j),j)mapy.itemset((i,j),rows-1-i)
rst=cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)
cv2.imshow("original",img)
cv2.imshow("result",rst)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
,左图是原始图像,右图是翻转结果图像

还有绕Y 翻转,绕X,Y 轴翻转,更多操作多动作试试

http://www.tj-hxxt.cn/news/46702.html

相关文章:

  • 顺德网站建设市场google官网入口手机版
  • 沧州模板建站平台网推怎么推广
  • 泰州市建设工程质量监督站网站关键词优化按天计费
  • 网站后台浏览器seo软件排行榜前十名
  • 服装网站建设论文全渠道营销管理平台
  • 网站域名跳转代码搜狗网站收录入口
  • github迁移wordpress深圳seo专家
  • 网站备案弊端郑州seo顾问
  • 台州做网站是什么北京seo顾问
  • 文化馆网站建设优化网站页面
  • 做公益网站的目的百度小程序入口
  • 软装设计师需要具备的能力seo服务 文库
  • 什么网站可以做游戏机培训机构招生方案范文
  • 三门峡做网站的公司衡水今日头条新闻
  • 动态网站开发实例如何给网站做推广
  • 开网站建设无锡营销型网站建设
  • 登封做网站推广在哪里可以免费自学seo课程
  • 个人建网站要花多少钱佛山seo外包平台
  • dedecms做的网站如何上线2022年新闻摘抄十条
  • 《21天网站建设实录培训网站模板
  • 网站维护中是不是关闭网站了襄阳百度开户
  • 汽车大全官网seo一个关键词多少钱
  • 长沙h5建站企业网络营销成功案例
  • 沧州企业网站建设方案网络营销包括的主要内容有
  • 包头建委网站找不到2023第二波疫情已经到来了吗
  • 询盘网站长沙关键词优化服务
  • 凌风wordpressseo怎么去优化
  • 重庆有网站公司长沙做引流推广的公司
  • 微信怎样建公众号惠州seo网站排名
  • 单位外部网站建设价格免费b2b网站推广