Image processing cvRemap以替换cvRemap

Image processing cvRemap以替换cvRemap,image-processing,opencv,emgucv,Image Processing,Opencv,Emgucv,下面是我想做的转换 对于源图像中的每个平铺,我知道每个角点的坐标,也知道输出图像中每个对应角点的坐标,因此我可以调用cvWarpPerspective来扭曲每个平铺,然后将四边形连接在一起以获得最终的输出图像 cvRemap能否在一次转换中完成此操作?如果是,如何从传递给cvRemap函数的坐标构造贴图(mapx和mapy)?我搜索了EmguCV文档,但找不到cvRemap示例 我没有使用emgu的经验(实际上我对它很不尊重),但我可以解释一下remap和warpPerspective。它可以

下面是我想做的转换

对于源图像中的每个平铺,我知道每个角点的坐标,也知道输出图像中每个对应角点的坐标,因此我可以调用cvWarpPerspective来扭曲每个平铺,然后将四边形连接在一起以获得最终的输出图像

cvRemap能否在一次转换中完成此操作?如果是,如何从传递给cvRemap函数的坐标构造贴图(mapx和mapy)?我搜索了EmguCV文档,但找不到cvRemap示例


我没有使用emgu的经验(实际上我对它很不尊重),但我可以解释一下remap和warpPerspective。它可以帮助您在emgu中找到相应的函数

“重新映射”获取输入图片和坐标重定位贴图,并将其应用于输出。地图存储的信息如下:将像素(1,4)移动到(3,5)。根据额外参数,贴图中未定义的像素将填充为0或其他值。请注意,它还使用一些插值来获得平滑结果

warpPerspective进行几何透视变换,在内部计算变换的贴图,然后调用remap()将其应用于输入。实际上,OpenCV中的许多函数都使用重新映射,或者可以使用它。翘曲仿射、镜头校正和其他构建自定义贴图,然后调用“重新映射”应用它们

透视变换由3.3矩阵H定义。因此,输入图像中的每个坐标将根据H矩阵进行移动:

            [ h11 h12 h13 ]    [ x ]
[x' y' 1] = [ h21 h22 h23 ] *  [ y ]
            [ h31 h32 h33 ]    [ 1 ]
warpPerspective对目标图像中的每个点应用逆变换,以找出源图像中应该移入的像素的位置,并将该信息存储在地图中

你可以用这些代码在你的应用程序中创建一个自定义函数,但我不知道在C#中实现它有多容易。C++是小菜一碟。 最后注意:我使用了术语map,尽管remap()函数中有两个map参数。更令人困惑的是,它们可能有完全不同的含义

  • 第一个有效的组合是,mapx包含x坐标的坐标变换,在一个宽高图像中,一个通道。mapy是y维度的对应贴图。坐标是浮点值,反映了从一个图像到另一个图像的坐标变换不能精确映射为整数值的事实。例如,像素(2,5)可以映射到(3.456,7.293)

  • 第二种可能是将x和y的整数坐标存储在两个通道的mapx中,并在第二个参数mapy中保留插值权重表。通常,生成第一种格式要容易得多,但是第二种格式的处理速度更快。要理解sencod格式,您应该阅读OpenCV源代码,因为它没有任何文档记录


我没有使用emgu的经验(事实上我对它很不尊重),但我可以解释remap和warpPerspective。它可以帮助您在emgu中找到相应的函数

“重新映射”获取输入图片和坐标重定位贴图,并将其应用于输出。地图存储的信息如下:将像素(1,4)移动到(3,5)。根据额外参数,贴图中未定义的像素将填充为0或其他值。请注意,它还使用一些插值来获得平滑结果

warpPerspective进行几何透视变换,在内部计算变换的贴图,然后调用remap()将其应用于输入。实际上,OpenCV中的许多函数都使用重新映射,或者可以使用它。翘曲仿射、镜头校正和其他构建自定义贴图,然后调用“重新映射”应用它们

透视变换由3.3矩阵H定义。因此,输入图像中的每个坐标将根据H矩阵进行移动:

            [ h11 h12 h13 ]    [ x ]
[x' y' 1] = [ h21 h22 h23 ] *  [ y ]
            [ h31 h32 h33 ]    [ 1 ]
warpPerspective对目标图像中的每个点应用逆变换,以找出源图像中应该移入的像素的位置,并将该信息存储在地图中

你可以用这些代码在你的应用程序中创建一个自定义函数,但我不知道在C#中实现它有多容易。C++是小菜一碟。 最后注意:我使用了术语map,尽管remap()函数中有两个map参数。更令人困惑的是,它们可能有完全不同的含义

  • 第一个有效的组合是,mapx包含x坐标的坐标变换,在一个宽高图像中,一个通道。mapy是y维度的对应贴图。坐标是浮点值,反映了从一个图像到另一个图像的坐标变换不能精确映射为整数值的事实。例如,像素(2,5)可以映射到(3.456,7.293)

  • 第二种可能是将x和y的整数坐标存储在两个通道的mapx中,并在第二个参数mapy中保留插值权重表。通常,生成第一种格式要容易得多,但是第二种格式的处理速度更快。要理解sencod格式,您应该阅读OpenCV源代码,因为它没有任何文档记录