像素重映射(cv::remap)

  简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。

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
)
Mat src, dst, map_x, map_y;
const char* OUTPUT_TITLE = "remap demo";
int index = ;
void update_map(void);
int main(int argc, char** argv) {
src = imread(STRPAHT3);
if (!src.data) {
printf("could not load image...\n");
return -;
}
namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE); map_x.create(src.size(), CV_32FC1);
map_y.create(src.size(), CV_32FC1); int c = ;
while (true) {
c = waitKey();
if ((char)c == ) {
break;
}
index = c % ;
update_map();
remap(src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(, , ));
imshow(OUTPUT_TITLE, dst);
}
return ;
} void update_map(void) {
for (int row = ; row < src.rows; row++) {
for (int col = ; col < src.cols; col++) {
switch (index) {
case :
if (col > (src.cols * 0.25) && col <= (src.cols*0.75) && row > (src.rows*0.25) && row <= (src.rows*0.75))
{
map_x.at<float>(row, col) = * (col - (src.cols*0.25));
map_y.at<float>(row, col) = * (row - (src.rows*0.25));
}
else
{
map_x.at<float>(row, col) = ;
map_y.at<float>(row, col) = ;
}
break;
case :
map_x.at<float>(row, col) = (src.cols - col - );
map_y.at<float>(row, col) = row;
break;
case :
map_x.at<float>(row, col) = col;
map_y.at<float>(row, col) = (src.rows - row - );
break;
case :
map_x.at<float>(row, col) = (src.cols - col - );
map_y.at<float>(row, col) = (src.rows - row - );
break;
} }
}
}

最新文章

  1. 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器
  2. 编译安装apache-2.4.18
  3. To follow the path
  4. SpringMVC批量上传
  5. VMware Tools安装方法及共享文件夹设置方法
  6. Vue.js——快速入门Vuex
  7. java调试与排错
  8. IDEA部署项目和多余的项目删掉的演示
  9. CreateThread给线程函数传递的参数
  10. ffmpeg 编译
  11. 什么是Docker?
  12. vue 过滤器基本使用
  13. 006-网页嵌入数据Data URI scheme
  14. Conditional特性用法
  15. C++面向对象高级开发课程(第三周)
  16. layer弹出相册层
  17. Luogu P4670 [BalticOI 2011 Day2]Plagiarism 题解
  18. C++ STL 常用排序算法
  19. JS可以监控手机的返回键吗?
  20. python使用git进行版本控制-分支管理

热门文章

  1. jmeter性能分析
  2. 2019-2020-1 20199314 &lt;Linux内核原理与分析&gt;第一周作业
  3. Docker学习之docker-compose
  4. Spark Streaming 入门
  5. 阿里云搭建nginx + uWSGI 实现 django 项目
  6. svn报错Item is not readable svn解决方案
  7. JS/Jquery 表单方式提交总结
  8. .Net Core 商城微服务项目系列(五):使用Polly处理服务错误
  9. 数据库系统概论——SQL
  10. [LeetCode] 704. Binary Search