# 照片处理-几何滤镜实现哈哈镜

## 二、处理流程

1. 原图输入
2. 定义变形算法，更准确点说是采样算法
3. 遍历原图中所有像素，按照2步进行坐标变换原坐标(x1, y1) -->（x2, y2）
4. 按照变换后的坐标采样得到像素new_rgb，并填充到原坐标(x1,y1)上

## 三、凸镜效果

```int f_ ConvexMirrorFilter(unsigned char* srcData, int width, int height, int stride, int x, int y, int k)
{
x = CLIP3(x, 0, width - 1);
y = CLIP3(y, 0, height - 1);
k = MAX2(k, 0);
float theta = 0;
int tX = 0;
int tY = 0;
int mapX = 0;
int mapY = 0;
int mapR = 0;
unsigned char* pSrc = srcData;
unsigned char* tempData = (unsigned char*)malloc(sizeof(unsigned char) * height * stride);
memcpy(tempData, srcData, sizeof(unsigned char) * height * stride);
int offset = stride - width * 4;
for(int j = 0; j < height; j++)
{
for(int i = 0; i < width; i++)
{
tX = i - x;
tY = j - y;
float distance = (i - x) * (i - x) + (j - y) * (j - y);
float dis = sqrt(distance);
if(distance <= k * k && distance > 0)
{
mapX = floor(dis * (i - x) / k + x);
mapY = floor(dis * (j - y) / k + y);
pSrc[0] = tempData[mapX * 4 + mapY * stride];
pSrc[1] = tempData[mapX * 4 + mapY * stride + 1];
pSrc[2] = tempData[mapX * 4 + mapY * stride + 2];
}
pSrc += 4;
}
pSrc += offset;
}
free(tempData);
return 0;
}```

## 四、凹镜

```int f_ConcaveMirrorFilter(unsigned char* srcData, int width, int height, int stride, int x, int y, int k)
{
x = CLIP3(x, 0, width - 1);
y = CLIP3(y, 0, height - 1);
k = MAX2(k, 0);
float theta = 0;
int tX = 0;
int tY = 0;
int mapX = 0;
int mapY = 0;
int mapR = 0;
unsigned char* pSrc = srcData;
unsigned char* tempData = (unsigned char*)malloc(sizeof(unsigned char) * height * stride);
memcpy(tempData, srcData, sizeof(unsigned char) * height * stride);
int offset = stride - width * 4;
for (int j = 0; j < height; j++)
{
for (int i = 0; i < width; i++)
{
tX = i - x;
tY = j - y;
theta = atan2((float)tY, (float)tX);
radius = (int)sqrt((float)(tX * tX + tY * tY));
mapX = CLIP3(x + (int)(mapR * cos(theta)), 0, width - 1);
mapY = CLIP3(y + (int)(mapR * sin(theta)), 0, height - 1);
pSrc[0] = tempData[mapX * 4 + mapY * stride];
pSrc[1] = tempData[mapX * 4 + mapY * stride + 1];
pSrc[2] = tempData[mapX * 4 + mapY * stride + 2];
pSrc += 4;
}
pSrc += offset;
}
free(tempData);
return 0;
}```

0 条评论

• ### 照片处理-阿宝色滤镜

阿宝色是一位摄影师名为阿宝(网名：aibao)，原名董立竑，由他在2008年左右所创的一种特别的色彩。这种色彩主要是，橘色的肤色和偏青色的背景色调为主，整体的视...

• ### 图像处理基础-高斯模糊

设置参数 r = 1, sigma= 1.0 得到 3 * 3的高斯模板，如下所示：

• ### 1. 解析Bitmap的ARGB，实现图片颜色选择器

因为大小端的缘故，和我们理解的ARGB的顺序相反，大小端读者有兴趣可以深入了解，

• ### 排序算法代码全实现

声明：本文为原创，作者为 对弈，转载时请保留本声明及附带文章链接：http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%...

• ### 2039. 树的统计

输入文件：counttree.in   输出文件：counttree.out 简单对比 时间限制：1 s   内存限制：128 MB 【题目描述】 关于...

• ### C到C++II

结构，联合，枚举C++结构体C++联合C++枚举bool类型内联重载缺省参数和哑元哑元引用引用特点引用做参数引用做函数返回值

• ### 2020-10-22在线识图搜索引擎

最近在逛淘宝时发现了淘宝的图片搜索功能，可能是我太Low了这个技术点已经实现很长时间了。想想自己能不能实现这个功能，起初我是这么想的，对两张图片从左上角的第一个...