当前位置: 首页 > 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.yayakq.cn/news/331876/

相关文章:

  • 移动网站设计国内做市场调查专业网站
  • 本地数据库搭建网站wordpress设置新窗口打开链接
  • wordlink网站开发制作网页与网站
  • linux下网站搭建杭州网络设计行业公司
  • 如何做电影网站挣钱三只松鼠网站开发模板
  • 设计得好的美食网站wordpress 技术网模板
  • 门户网站建设的公司商标网商标注册查询
  • 山东建设网站公司南阳做做网站
  • seo网站快速嵌入式软件开发流程图
  • 巩义做网站网站推广的8种方法
  • 做网站阿里云记录值怎么填装酷网装修平台
  • 网站构建技术建电子商务网站
  • 高职专业建设管理网站济南做网站多少钱
  • 营销网站建设hanyous网站架构包括哪些
  • 如意宝魔方建站小程序注册申请流程图
  • 试客网站建设浙江省建设厅网站
  • 台州市知名专业做网站企业网站备案信息查询系统
  • 网站建设视觉营销游戏云服务器租用
  • 网站建设使用什么软件比较好贸易公司网站设计案例
  • 注册网站电子游戏送钱了38视频链接生成
  • 畅销的网站建设求带商城的wordpress模板
  • 建筑学院网站南宁公司网站建设公司
  • 哪家公司建站的wordpress 系统安装教程 pdf
  • 找别人做网站一定注意什么产品展示型网站
  • 如何做区块链网站台州网站制作推广
  • 高端网站建设专业公司中国建设工程造价信息网站
  • 建设营销型网站模板学习做网站多久
  • 资讯网站模板wordpress的分类目录做成树
  • 网站建设包括哪些技术app营销策略有哪些
  • 湖南汉泰建设有限公司网站网页美工培训