openCv之像素重映射

像素重映射的简单变换知识:
在这里插入图片描述
在这里插入图片描述
备注:
**1.**在上图a中,缩小一半放在中心可理解为;在一个4X4的矩阵中,只在中间两格区域内填像素,并且,中间部分像素采用隔一个格子取一个像素,既如果原来图片像素坐标取为(1,1)(1,2)(1,3)…dst的像素则变成(1,1)(1,3)(1,5)…(1,2n+1)…。
2.很多网上例程说a后面加0.5或者-1等,我的例程不加也没有影响,应该是和每个人选取的图片大小格式等有关。
相关程序
#include “stdafx.h”

//本节讲述 图像处理之 像素重映射;
#include <opencv2/opencv.hpp>
#include
#include <math.h>

using namespace std;
using namespace cv;

Mat src, dst,map_x,map_y, gray_src;
int index = 0;
void update_map(void);

const char*output_title = “canny双阈值处理”;
char input_title[] = “原图”;

int main(int argc, char**argv)
{
src = imread(“C:/Users/Rubison.DELL/Desktop\杂物/壁纸/小白2.jpg”); //存放自己图像的路径
if (!src.data)
{
printf(“could not load image…\r\n”);
return -1;
}

namedWindow(input_title, CV_WINDOW_AUTOSIZE);
imshow(input_title, src);
 
map_x.create(src.size(),CV_32FC1);     代表目标图像的某像素的x坐标
map_y.create(src.size(), CV_32FC1);     //代表目标图像的某像素的y坐标

int c = 0;
while (true)
{
	c = waitKey(500);
	if ((char)c == 27)
	{
		break;
	}
	index = c % 4;
	update_map();
	remap(src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 255, 255));
	imshow("结果图", dst);
}
index = c % 4;
update_map();
remap(src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 255, 255));
imshow("结果图", dst);
waitKey(0);
destroyAllWindows();
return 0;

}

void update_map(void)
{
for (int row = 0; row < src.rows; row++)
{
for (int col = 0; col < src.cols; col++)
{
switch (index)
{
case 0:
if (col > src.cols0.25 && col < src.cols0.75 && row > src.rows0.25 && row < src.rows0.75)
{
map_x.at(row, col) = 2 * (col - src.cols0.25) + 0.5;
map_y.at(row, col) = 2 * (row - src.rows
0.25) + 0.5;
/* map_x.at(row, col) = 2 * (col - src.cols0.25);
map_y.at(row, col) = 2 * (row - src.rows
0.25);*/
}
else
{
map_x.at(row, col) = 0;
map_y.at(row, col) = 0;
}
break;
case 1:
map_x.at(row, col) = src.cols-col-1;
map_y.at(row, col) = row;
break;
case 2:
map_x.at(row, col) = col;
map_y.at(row, col) = src.rows - row - 1;
break;
case 3:
map_x.at(row, col) = src.cols - col - 1;
map_y.at(row, col) = src.rows - row - 1;
break;
}
}

}

}

结果验证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w5875895

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值