失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > OpenCV人工智能图像处理学习笔记 第5章 计算机视觉加强之图像美化

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

时间:2020-01-13 21:19:36

相关推荐

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

目录

主要内容

5-2 彩色图片直方图

03图片修补

04灰度直方图源码

05彩色直方图源码

06灰度直方图均衡化1

彩色直方图均衡化

增强效果

5-10 磨皮美白

5-11 高斯均值滤波

均值滤波

中值滤波

图像美化总结

主要内容

5-2 彩色图片直方图

import cv2import numpy as npdef 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 Bfor 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 cv2import numpy as npimg = 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 cv2import numpy as npimg = 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 cv2import numpy as npimg = 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 npimg = 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 inpaintimport cv2 import numpy as npimg = cv2.imread('damaged.jpg',1)cv2.imshow('src',img)imgInfo = img.shapeheight = 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] = 255for i in range(150,250):paint[250,i] = 255paint[250+1,i] = 255paint[250-1,i] = 255cv2.imshow('paint',paint)#1 src 2 maskimgDst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA)cv2.imshow('image',imgDst)cv2.waitKey(0)

04灰度直方图源码

# 1 0-255 2 概率 # 本质:统计每个像素灰度 出现的概率 0-255 pimport cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image0.jpg',1)imgInfo = img.shapeheight = 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 = countplt.bar(x,y,0.9,alpha=1,color='b')plt.show()cv2.waitKey(0)

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

05彩色直方图源码

# 本质:统计每个像素灰度 出现的概率 0-255 pimport cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image0.jpg',1)imgInfo = img.shapeheight = 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]+1for 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_bplt.figure()plt.bar(x,y1,0.9,alpha=1,color='b')y2 = count_gplt.figure()plt.bar(x,y2,0.9,alpha=1,color='g')y3 = count_rplt.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 cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image0.jpg',1)imgInfo = img.shapeheight = 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]+1for 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 cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('image0.jpg',1)cv2.imshow('src',img)imgInfo = img.shapeheight = 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]+1for 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+40import cv2import numpy as npimg = cv2.imread('image0.jpg',1)imgInfo = img.shapeheight = 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 = newimport cv2import numpy as npimg = cv2.imread('image0.jpg',1)imgInfo = img.shapeheight = 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 cv2img = 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 cv2import numpy as npimg = 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 -》Pimport cv2import numpy as npimg = cv2.imread('image11.jpg',1)cv2.imshow('src',img)imgInfo = img.shapeheight = 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 cv2import numpy as npimg = cv2.imread('image11.jpg',1)imgInfo = img.shapeheight = 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章 计算机视觉加强之图像美化》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。