opencv中为一个Mat类赋值并改变它的值、remap

Mat

const int BLOCK_SZ = 64;
short XY[BLOCK_SZ*BLOCK_SZ * 2], A[BLOCK_SZ*BLOCK_SZ];

其中XY和A是一个已知大小的容器:

Mat _XY(bh, bw, CV_16SC2, XY), matA;
short* xy = XY + y1*bw * 2;
short* alpha = A + y1*bw;
Mat _matA(bh, bw, CV_16U, A);

这样,改变XY的值就能改变_XY的值,_MatA和A也是,alpha和A(这个是指针)。

Remap

convertMaps

Converts image transformation maps from one representation to another.

C++:  void  convertMaps (InputArray  map1, InputArray  map2, OutputArray  dstmap1, OutputArray  dstmap2, int  dstmap1type, bool  nninterpolation=false  )
Python:   cv2. convertMaps (map1, map2, dstmap1type [, dstmap1 [, dstmap2 [, nninterpolation ] ] ] ) → dstmap1, dstmap2
Parameters:
  • map1 – The first input map of type CV_16SC2 , CV_32FC1 , or CV_32FC2 .
  • map2 – The second input map of type CV_16UC1 , CV_32FC1 , or none (empty matrix), respectively.
  • dstmap1 – The first output map that has the type dstmap1type and the same size as src .
  • dstmap2 – The second output map.
  • dstmap1type – Type of the first output map that should be CV_16SC2 , CV_32FC1 , or CV_32FC2 .
  • nninterpolation – Flag indicating whether the fixed-point maps are used for the nearest-neighbor or for a more complex interpolation.

The function converts a pair of maps for remap() from one representation to another. The following options ( (map1.type(), map2.type()) \rightarrow (dstmap1.type(), dstmap2.type()) ) are supported:

  • \texttt{(CV\_32FC1, CV\_32FC1)} \rightarrow \texttt{(CV\_16SC2, CV\_16UC1)} . This is the most frequently used conversion operation, in which the original floating-point maps (see remap() ) are converted to a more compact and much faster fixed-point representation. The first output array contains the rounded coordinates and the second array (created only when nninterpolation=false ) contains indices in the interpolation tables.
  • \texttt{(CV\_32FC2)} \rightarrow \texttt{(CV\_16SC2, CV\_16UC1)} . The same as above but the original maps are stored in one 2-channel matrix.
  • Reverse conversion. Obviously, the reconstructed floating-point maps will not be exactly the same as the originals.

See also

 

remap()undistort()initUndistortRectifyMap()

remap

Applies a generic geometrical transformation to an image.

C++:  void  remap (InputArray  src, OutputArray  dst, InputArray  map1, InputArray  map2, int  interpolation, int  borderMode=BORDER_CONSTANT, const Scalar&  borderValue=Scalar() )
Python:   cv2. remap (src, map1, map2, interpolation [, dst [, borderMode [, borderValue ] ] ] ) → dst
C:  void  cvRemap (const CvArr*  src, CvArr*  dst, const CvArr*  mapx, const CvArr*  mapy, int  flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar  fillval=cvScalarAll(0)  )
Python:   cv. Remap (src, dst, mapx, mapy, flags=CV_INNER_LINEAR+CV_WARP_FILL_OUTLIERS, fillval=(0, 0, 0, 0) ) → None
Parameters:
  • src – Source image.
  • dst – Destination image. It has the same size as map1 and the same type as src .
  • map1 – The first map of either (x,y) points or just x values having the type CV_16SC2 , CV_32FC1 , or CV_32FC2 . See convertMaps() for details on converting a floating point representation to fixed-point for speed.
  • map2 – The second map of y values having the type CV_16UC1 , CV_32FC1 , or none (empty map if map1 is (x,y) points), respectively.
  • interpolation – Interpolation method (see resize() ). The method INTER_AREA is not supported by this function.
  • borderMode – Pixel extrapolation method (see borderInterpolate() ). When borderMode=BORDER_TRANSPARENT , it means that the pixels in the destination image that corresponds to the “outliers” in the source image are not modified by the function.
  • borderValue – Value used in case of a constant border. By default, it is 0.

The function remap transforms the source image using the specified map:

\texttt{dst} (x,y) =  \texttt{src} (map_x(x,y),map_y(x,y))

where values of pixels with non-integer coordinates are computed using one of available interpolation methods. map_x and map_y can be encoded as separate floating-point maps in map_1 and map_2 respectively, or interleaved floating-point maps of (x,y) in map_1 , or fixed-point maps created by using convertMaps() . The reason you might want to convert from floating to fixed-point representations of a map is that they can yield much faster (~2x) remapping operations. In the converted case, map_1 contains pairs (cvFloor(x), cvFloor(y)) and map_2 contains indices in a table of interpolation coefficients.

This function cannot operate in-place.

resize






猜你喜欢

转载自blog.csdn.net/weixin_41484240/article/details/80638448