1 、原理
把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像
image.png
2 、API 介绍
Remap(
InputArray src,// 输入图像
OutputArray dst,// 输出图像
InputArray map1,// x 映射表 CV_32FC1/CV_32FC2
InputArray map2,// y 映射表
int interpolation,// 选择的插值方法,常见线性插值,可选择立方等
int borderMode,// BORDER_CONSTANT
const Scalar borderValue// color
)
CV_<bit_depth>(S|U|F)C<number_of_channels>
1--bit_depth---比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说,如
如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张
灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对
应的就是CV_8
2--S|U|F--S--代表---signed int---有符号整形
U--代表--unsigned int--无符号整形
F--代表--float---------单精度浮点型
3--C<number_of_channels>----代表---一张图片的通道数,比如:
1--灰度图片--grayImg---是--单通道图像
2--RGB彩色图像---------是--3通道图像
3--带Alph通道的RGB图像--是--4通道图像
3 、整体代码测试
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src, dst,fx,fy;
src = imread("D:\\7.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
char INPUT_TITLE[] = "input image";
char OUTPUT_TITLE[] = "hough circle demo";
namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);
namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);
imshow(INPUT_TITLE, src);
dst.create(src.size(), src.type());
fx.create(src.size(), CV_32FC1);
fy.create(src.size(), CV_32FC1);
int srows = fx.rows;
int scol = fx.cols;
cout << fx.rows << fx.cols;
for (int j = 0; j < srows; j++)
{
for (int i = 0; i < scol; i++)
{
//x与y均翻转
fx.at<float>(j, i) = srows - i-200;
fy.at<float>(j, i) = j;
}
}
remap(src, dst, fx, fy, INTER_LINEAR, BORDER_REPLICATE, Scalar(0, 255, 255));
imshow(OUTPUT_TITLE, dst);
waitKey(0);
return 0;
}

image.png
