概述
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kun1280437633/article/details/86218011
1.彩色图片直方图
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-255 hist = cv2.calcHist([image],[0],None,[256],[0.0,255.0]) minV,maxV,minL,maxL = cv2.minMaxLoc(hist) 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 histImg img = 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)
2.直方图均衡化
#灰度 直方图均衡化 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)
3.图像修补
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] = 255 paint[i,200+1] = 255 paint[i,200-1] = 255 for i in range(150,250): paint[250,i] = 255 paint[250+1,i] = 255 paint[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)
4.灰度直方图源码
4.灰度直方图源码 # 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 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)
5.彩色直方图源码
# 本质:统计每个像素灰度 出现的概率 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]+1 count_g[index_g] = count_g[index_g]+1 count_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)
6.灰度直方图均衡化
# 本质:统计每个像素灰度 出现的概率 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)
7.彩色直方图均衡化
# 本质:统计每个像素灰度 出现的概率 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]+1 count_g[index_g] = count_g[index_g]+1 count_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_b count_g[i] = sum_g count_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)
8.亮度增强
# 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)+40 gg = int(g)+40 rr = int(r)+40 if bb>255: bb = 255 if gg>255: gg = 255 if rr>255: rr = 255 dst[i,j] = (bb,gg,rr) cv2.imshow('dst',dst) cv2.waitKey(0)
9.磨皮美白
# 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)+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)
#双边滤波 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)
10.高斯均值滤波
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 2 for 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)
11.中值滤波
# 中值滤波 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 = 0 for m in range(-1,2): for n in range(-1,2): gray = img[i+m,j+n] 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): if p1<collect[t]: mid = collect[t] collect[t] = p1 p1 = mid dst[i,j] = collect[4] cv2.imshow('dst',dst) cv2.waitKey(0)
最后
以上就是曾经蛋挞为你收集整理的opencv(python)实战演练之图像美化的全部内容,希望文章能够帮你解决opencv(python)实战演练之图像美化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复