opencv3.1学习笔记(22) 像素重映射


演示代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;
int index = 0;
Mat src, dst,mapx,mapy;
void updateMap(void);
const char* OUTTITLE = "remap";
int main(int argc, char** argv) {
	
	src = imread("e:/girl.png");
	namedWindow("src", CV_WINDOW_AUTOSIZE);
	namedWindow(OUTTITLE, CV_WINDOW_AUTOSIZE);
	imshow("src", src);

	mapx.create(src.size(), CV_32FC1);
	mapy.create(src.size(), CV_32FC1);

	int c = 0;
	while (true) {
		c = waitKey(500);
		if ((char)c == 27) {
			break;
		}
		index = c % 4;
		updateMap();
		remap(src, dst, mapx, mapy, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 255, 255));
		imshow(OUTTITLE,dst);
	}

	waitKey(0);
	return 0;
}

void updateMap(void) {
	for (int row = 0; row < src.rows; row++) {
		for (int col = 0; col < src.cols; col++) {
			switch (2) {
			case 0: //变成原来1/2
				if (col > (src.cols * 0.25) && col<(src.cols * 0.75) && 
					row>(src.rows * 0.25) && row < (src.rows * 0.75)) {
					mapx.at<float>(row, col) = 2 * (col - (src.cols * 0.25) + 0.5);
					mapy.at<float>(row, col) = 2 * (row - (src.rows * 0.25) + 0.5);
				}
				else {
					mapx.at<float>(row, col) = 0;
					mapy.at<float>(row, col) = 0;
				}
				break;
			case 1: //x方向对调
				mapx.at<float>(row, col) = (src.cols - col - 1);
				mapy.at<float>(row, col) = row;
				break;
			case 2: //y方向对调
				mapx.at<float>(row, col) = col;
				mapy.at<float>(row, col) = (src.rows - row - 1);
				break;
			case 3: //xy方向周时对调
				mapx.at<float>(row, col) = (src.cols - col - 1);
				mapy.at<float>(row, col) = (src.rows - row - 1);
				break;
			}
		}
	}
}


image.png

(0  缩小1/2)


image.png

(1 x方向对调)


image.png

(2  y方向对调)


image.png

(3  x,y方向同时对调)


代码说明:


什么是像素重映射

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

image.png


假设有映射函数 image.png

image.png


API介绍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 
)


image.png


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文章代码及资料部分或全部来自贾志刚老师的视频,勇哥只是在个人理解的基础上做学习笔记,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864