# 12- OpenCV+TensorFlow 入门人工智能图像处理-磨皮美白

## 磨皮美白

```for i in range(0,height):
for j in range(0,width):
(b,g,r) = img[i,j]
bb = int(b*1.3)+10
gg = int(g*1.2)+15

if bb>255:
bb = 255
if gg>255:
gg = 255```

```# p = p+40
# 改进: p = p*1.2+40

# g+r P*piexl = new
import cv2
import numpy as np
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('src',img)
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
for j in range(0,width):
(b,g,r) = img[i,j]
bb = int(b*1.3)+10
gg = int(g*1.2)+15

if bb>255:
bb = 255
if gg>255:
gg = 255

dst[i,j] = (bb,gg,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)```

mark

### 磨皮美白(双边滤波)

```# 双边滤波
import cv2
cv2.imshow('src',img)

# 双边滤波过滤器: 到时候讲解
dst = cv2.bilateralFilter(img,15,35,35)
cv2.imshow('dst',dst)
cv2.waitKey(0)```

mark

## 高斯均值滤波

```import cv2
import numpy as np
cv2.imshow('src',img)
# 这些参数在讲解高斯核时介绍
dst = cv2.GaussianBlur(img,(5,5),1.5)
cv2.imshow('dst',dst)
cv2.waitKey(0)```

mark

### 均值滤波

```# 均值 6*6 1 。 * 【6*6】/36 = mean -》P
import cv2
import numpy as np
# 读取带噪声的图片
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

# 目标图片
dst = np.zeros((height,width,3),np.uint8)

# 遍历所有点。(6,6)
for i in range(3,height-3):
for j in range(3,width-3):
# 统计模板中6,6的矩阵元素和。
sum_b = int(0)
sum_g = int(0)
sum_r = int(0)
# (6,6)
for m in range(-3,3): # -3 -2 -1 0 1 2 共6个值
for n in range(-3,3):
# 读取6,6这个小块中的每一个数据累加
(b,g,r) = img[i+m,j+n]
sum_b = sum_b+int(b)
sum_g = sum_g+int(g)
sum_r = sum_r+int(r)
# bgr 获取均值
b = np.uint8(sum_b/36)
g = np.uint8(sum_g/36)
r = np.uint8(sum_r/36)
dst[i,j] = (b,g,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)```

mark

## 中值滤波

```# 中值滤波 取中间值代替原来像素值过程
# 3*3模板 九个像素进行排序，排序之后中间值替换原来像素值

import cv2
import numpy as np
# 读取噪声图片
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# 灰度化
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('src',img)
# 最终生成结果
dst = np.zeros((height,width,3),np.uint8)

# 数组，这九个元素。大小为9
collect = np.zeros(9,np.uint8)

# 两层for循环遍历每一个点
for i in range(1,height-1):
for j in range(1,width-1):

# 描述即将装取数据的下标
k = 0
# (3,3) 从-1开始到2
for m in range(-1,2): # -1 0 1
for n in range(-1,2):
# 获取当前灰度值
gray = img[i+m,j+n]
# 下标就是我们的k
collect[k] = gray
k = k+1
#  0 1 2 3 4 5 6 7 8
#  1
# 拿一个元素和其他元素进行比较
# 如果这个元素最大或者最小都放到最后面
# 完成大小排序
for k in range(0,9):
# 第一个元素
p1 = collect[k]
for t in range(k+1,9):
# 如果p1小于比较值
if p1<collect[t]:
# 设置中间值，完成数据交换
mid = collect[t]
collect[t] = p1
p1 = mid
# 取中间值
dst[i,j] = collect[4]
cv2.imshow('dst',dst)
cv2.waitKey(0)```

mark

## 总结

• 直方图 & 直方图均衡化 & 亮度增强
• 磨皮美白 & 图片滤波 & 高斯滤波

• 直方图: 本质统计每个像素灰度出现的概率 x: 0 - 255 p(0-1)
• 在原有基础上将概率离散化
1. 统计每个颜色出现的概率
2. 累计概率 最后的几个概率接近1
3. 根据累计概率，进行0-255映射表的创建
`公式: newp = 255 * p`
• 计算新的像素值。

YUV方式不改变颜色。

mark

```7*1
4*2
1*1```

mark

mark

api实现。

g + r 两者加权形成一个共同的核。

0 条评论

## 相关文章

1912

42913

3304

1913

### 基于模糊集理论的一种图像二值化算法的原理、实现效果及代码

这是篇很古老的论文中的算法，发表与1994年，是清华大学黄良凯（Liang-kai Huang) 所写，因此国外一些论文里和代码里称之为Huang's fu...

25611

6308

5736

1454

### 为什么很多做人脸的Paper会最后加入一个Local Connected Conv？

Deep face：论文。 a. 人脸检测，使用6个基点 b. 二维剪切，将人脸部分裁剪出来 c. 67个基点，然后Delaunay三角化，在轮廓处添加三角形来...

3195

### KNN最近邻算法及其Python实现

k-NN是一种基本的分类和回归方法，用于分类时，算法思路较简单：通过计算不同特征之间的距离方法来得到最近的k个训练实例，根据k个实例的类别采用多数表决等方式进...

7297