目录

主要内容

5-2 彩色图片直方图

03图片修补

04灰度直方图源码

05彩色直方图源码

06灰度直方图均衡化1

彩色直方图均衡化

增强效果

5-10 磨皮美白

5-11 高斯均值滤波

均值滤波

中值滤波

图像美化总结


主要内容

5-2 彩色图片直方图

import cv2
import numpy as np
def ImageHist(image,type):color = (255,255,255)windowName = 'Gray'if type == 31:color = (255,0,0)windowName = 'B Hist'elif type == 32:color = (0,255,0)windowName = 'G Hist'elif type == 33:color = (0,0,255)windowName = 'R Hist'# 1 image 2 [0] 3 mask None 4 256 5 0-255hist = cv2.calcHist([image],[0],None,[256],[0.0,255.0])minV,maxV,minL,maxL = cv2.minMaxLoc(hist)print(maxV)histImg = np.zeros([256,256,3],np.uint8)for h in range(256):intenNormal = int(hist[h]*256/maxV)cv2.line(histImg,(h,256),(h,256-intenNormal),color)cv2.imshow(windowName,histImg)return histImgimg = cv2.imread('image0.jpg',1)
channels = cv2.split(img)# RGB - R G B
for i in range(0,3):ImageHist(channels[i],31+i)
cv2.waitKey(0)imGray = cv2.imread('image0.jpg', 0)
ImageHist(imGray, 0)
cv2.waitKey(0)
#灰度 直方图均衡化
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('src',gray)
dst = cv2.equalizeHist(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)
#彩色 直方图均衡化
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)
(b,g,r) = cv2.split(img)#通道分解
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
result = cv2.merge((bH,gH,rH))# 通道合成
cv2.imshow('dst',result)
cv2.waitKey(0)
#YUV 直方图均衡化
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgYUV = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
cv2.imshow('src',img)
channelYUV = cv2.split(imgYUV)
channelYUV[0] = cv2.equalizeHist(channelYUV[0])
channels = cv2.merge(channelYUV)
result = cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR)
cv2.imshow('dst',result)
cv2.waitKey(0)

03图片修补

import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
for i in range(200,300):img[i,200] = (255,255,255)img[i,200+1] = (255,255,255)img[i,200-1] = (255,255,255)
for i in range(150,250):img[250,i] = (255,255,255)img[250+1,i] = (255,255,255)img[250-1,i] = (255,255,255)
cv2.imwrite('damaged.jpg',img)
cv2.imshow('image',img)
cv2.waitKey(0)
#1 坏图 2 array 修复哪一段 3 inpaint
import cv2
import numpy as np
img = cv2.imread('damaged.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
paint = np.zeros((height,width,1),np.uint8)for i in range(200,300):paint[i,200] = 255paint[i,200+1] = 255paint[i,200-1] = 255
for i in range(150,250):paint[250,i] = 255paint[250+1,i] = 255paint[250-1,i] = 255
cv2.imshow('paint',paint)
#1 src 2 mask
imgDst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA)cv2.imshow('image',imgDst)
cv2.waitKey(0)

04灰度直方图源码

# 1 0-255 2 概率
# 本质:统计每个像素灰度 出现的概率 0-255 p
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
count = np.zeros(256,np.float)for i in range(0,height):for j in range(0,width):pixel = gray[i,j]index = int(pixel)count[index] = count[index]+1
#         print(count[index])for i in range(0,255):count[i] = count[i]/(height*width)
x = np.linspace(0,255,256)
y = count
plt.bar(x,y,0.9,alpha=1,color='b')
plt.show()
cv2.waitKey(0)

直方图统计各像素颜色出现的概率 0-255 p

05彩色直方图源码

# 本质:统计每个像素灰度 出现的概率 0-255 p
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]count_b = np.zeros(256,np.float)
count_g = np.zeros(256,np.float)
count_r = np.zeros(256,np.float)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]index_b = int(b)index_g = int(g)index_r = int(r)count_b[index_b] = count_b[index_b]+1count_g[index_g] = count_g[index_g]+1count_r[index_r] = count_r[index_r]+1
for i in range(0,256):count_b[i] = count_b[i]/(height*width)count_g[i] = count_g[i]/(height*width)count_r[i] = count_r[i]/(height*width)
x = np.linspace(0,255,256)
y1 = count_b
plt.figure()
plt.bar(x,y1,0.9,alpha=1,color='b')
y2 = count_g
plt.figure()
plt.bar(x,y2,0.9,alpha=1,color='g')
y3 = count_r
plt.figure()
plt.bar(x,y3,0.9,alpha=1,color='r')
plt.show()
cv2.waitKey(0)

06灰度直方图均衡化1

# 本质:统计每个像素灰度 出现的概率 0-255 p
# 累计概率
# 1 0.2  0.2
# 2 0.3  0.5
# 3 0.1  0.6
# 256
# 100 0.5 255*0.5 = new
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image0.jpg',1)imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('src',gray)
count = np.zeros(256,np.float)
for i in range(0,height):for j in range(0,width):pixel = gray[i,j]index = int(pixel)count[index] = count[index]+1
for i in range(0,255):count[i] = count[i]/(height*width)
#计算累计概率
sum1 = float(0)
for i in range(0,256):sum1 = sum1+count[i]count[i] = sum1
#print(count)
# 计算映射表
map1 = np.zeros(256,np.uint16)
for i in range(0,256):map1[i] = np.uint16(count[i]*255)
# 映射
for i in range(0,height):for j in range(0,width):pixel = gray[i,j]gray[i,j] = map1[pixel]
cv2.imshow('dst',gray)
cv2.waitKey(0)

彩色直方图均衡化

# 本质:统计每个像素灰度 出现的概率 0-255 p
# 累计概率
# 1 0.2  0.2
# 2 0.3  0.5
# 3 0.1  0.6
# 256
# 100 0.5 255*0.5 = new
# 1 统计每个颜色出现的概率 2 累计概率 1 3 0-255 255*p
# 4 pixel
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('image0.jpg',1)
cv2.imshow('src',img)imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]count_b = np.zeros(256,np.float)
count_g = np.zeros(256,np.float)
count_r = np.zeros(256,np.float)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]index_b = int(b)index_g = int(g)index_r = int(r)count_b[index_b] = count_b[index_b]+1count_g[index_g] = count_g[index_g]+1count_r[index_r] = count_r[index_r]+1
for i in range(0,255):count_b[i] = count_b[i]/(height*width)count_g[i] = count_g[i]/(height*width)count_r[i] = count_r[i]/(height*width)
#计算累计概率
sum_b = float(0)
sum_g = float(0)
sum_r = float(0)
for i in range(0,256):sum_b = sum_b+count_b[i]sum_g = sum_g+count_g[i]sum_r = sum_r+count_r[i]count_b[i] = sum_bcount_g[i] = sum_gcount_r[i] = sum_r
#print(count)
# 计算映射表
map_b = np.zeros(256,np.uint16)
map_g = np.zeros(256,np.uint16)
map_r = np.zeros(256,np.uint16)
for i in range(0,256):map_b[i] = np.uint16(count_b[i]*255)map_g[i] = np.uint16(count_g[i]*255)map_r[i] = np.uint16(count_r[i]*255)
# 映射
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]b = map_b[b]g = map_g[g]r = map_r[r]dst[i,j] = (b,g,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)

增强效果

先行后列 先高后宽

# p = p+40
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
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)+40gg = int(g)+40rr = int(r)+40if bb>255:bb = 255if gg>255:gg = 255if rr>255:rr = 255dst[i,j] = (bb,gg,rr)
cv2.imshow('dst',dst)
cv2.waitKey(0)

5-10 磨皮美白

用opencv的一函数 采用双边滤波 两个内核 一个去噪一个保持细节

# p = p+40
# p = p*1。2+40
# g+r P*piexl = new
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
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)+10gg = int(g*1.2)+15if bb>255:bb = 255if gg>255:gg = 255dst[i,j] = (bb,gg,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)
#双边滤波
import cv2
img = cv2.imread('1.png',1)
cv2.imshow('src',img)
dst = cv2.bilateralFilter(img,15,35,35)
cv2.imshow('dst',dst)
cv2.waitKey(0)

5-11 高斯均值滤波

import cv2
import numpy as np
img = cv2.imread('image11.jpg',1)
cv2.imshow('src',img)
dst = cv2.GaussianBlur(img,(5,5),1.5)
cv2.imshow('dst',dst)
cv2.waitKey(0)

虽然去噪了但模糊了

均值滤波

#均值 6*6 1 。 * 【6*6】/36 = mean -》P
import cv2
import numpy as np
img = cv2.imread('image11.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width,3),np.uint8)
for i in range(3,height-3):for j in range(3,width-3):sum_b = int(0)sum_g = int(0)sum_r = int(0)for m in range(-3,3):#-3 -2 -1 0 1 2for n in range(-3,3):(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)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)

边缘点没有做处理

没有细节了

中值滤波

# 中值滤波 3*3
import cv2
import numpy as np
img = cv2.imread('image11.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
img = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
cv2.imshow('src',img)
dst = np.zeros((height,width,3),np.uint8)
collect = np.zeros(9,np.uint8)
for i in range(1,height-1):for j in range(1,width-1):k = 0for m in range(-1,2):for n in range(-1,2):gray = img[i+m,j+n]collect[k] = grayk = 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):if p1<collect[t]:mid = collect[t]collect[t] = p1p1 = middst[i,j] = collect[4]
cv2.imshow('dst',dst)
cv2.waitKey(0)

mn循环完成3*3模板的装载, -1, 0, 1

这个过程还是没看懂

kt循环是完成排序找中值

效果并不是很好

图像美化总结

直方图 横0-255 纵坐标是指出现的概率

统计每个颜色出现的概率 --》累计概率--》255*p --->pxiel计算新的

二维高斯的特点

双边滤波 有两个核  由一个高斯核和一个R的距离核 然后核函数与像素卷积得到新东西

OpenCV人工智能图像处理学习笔记 第5章 计算机视觉加强之图像美化相关推荐

  1. 人工智能导论学习笔记02

    人工智能导论学习笔记02--第二章 :人工智能哲学基础 人工智能导论学习笔记 人工智能导论学习笔记02--第二章 :人工智能哲学基础 第一讲 大历史观下的人工智能 宇宙演化 人类与生命进化 机器进化 ...

  2. 数字图像处理学习笔记(六)——数字图像处理中用到的数学操作

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  3. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  4. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  5. 数字图像处理学习笔记 六 彩色图像处理

    目录 (一)彩色模型介绍 1.1 RGB模型 1.2 CMY.CMYK模型 1.3 HSI彩色模型 1.4 HSV模型 1.5 YCbCr 彩色空间 (二)伪彩色图像处理 (三)全彩色图像处理及彩色变 ...

  6. 图像处理学习笔记(二)

    图像处理学习笔记(二) 4 OpenCV图像处理: 4.2 形态学操作: 4.2.1 连通性: 4.2.1 腐蚀和膨胀: 4.2.2 开闭运算: 4.2.3 礼帽和黑帽: 4.2.4 形态学操作总结: ...

  7. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  8. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  9. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

  10. OpenCV与图像处理学习十二——图像形状特征之HOG特征

    OpenCV与图像处理学习十二--图像形状特征之HOG特征 一.图像特征理解 1.1 颜色特征 1.2 纹理特征 1.3 形状特征 1.4 空间关系特征 二.形状特征描述 2.1 HOG特征 2.1. ...

最新文章

  1. Nature:最强癌基因找到了,居然不在染色体上 | 华人领衔最新研究
  2. python 中cPickle学习二
  3. 推动Windows的限制:句柄
  4. 移动端手机火狐浏览器全屏插件
  5. AngularJS 指令实践指南(二)
  6. 大数据学习笔记21:MR案例——分区全排序
  7. 程序设计导引及在线实践之时区间时间的转换
  8. java 下载junit的jar包_junit jar包下载-Junit4 jar包下载 --pc6下载站
  9. 高德公交路径等时线分析
  10. css之右上角带弧形的三角形标签文字45度倾斜显示
  11. 10个经典的公开数据集+免费下载链接
  12. 团队管理8--管理工作框架及技能图谱
  13. PMP证书现在还值得考吗?
  14. 2018十大网络用语新鲜出炉,skr入围榜三!
  15. JDK--box和unbox
  16. 基于小程序开发的藏书馆
  17. 苏嵌//张福辉//2018.7.24
  18. Python安装pip时, 报错:zipimport.ZipImportError: can‘t decompress data; zlib not available 解决办法:
  19. 【Neo4j】第 9 章:预测关系
  20. MATLAB之傅里叶展开(五)

热门文章

  1. 买的是ARM指令集授权,不是已设计好的CPU核?
  2. android屏蔽按键精灵,安卓按键精灵的,关闭app程序问题!
  3. mysql 优化器_深入解析:从源码窥探MySQL优化器
  4. _wsplitpath_s
  5. rhel6.x版本和rehel7.x版本破解密码及恢复损坏的文件分区
  6. 人工智能你必须掌握的32个算法(二)归并排序算法
  7. IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结
  8. mySQL和oracle的数据类型区别
  9. Netty 长连接服务
  10. U-Mail邮件服务器教您揭穿冒充发件人的伎俩