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\n", 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('haha.png',1) channels = cv2.split(img)# RGB - R G B\n", for i in range(0,3): ImageHist(channels[i],31+i) cv2.waitKey(10000) 难以想象,这么一坨东西,就是我和我弟弟~

首先最重要的就是需要一张非常好看的自拍~~~
第二张图明显要更加亮一些。
import cv2 import numpy as np img=cv2.imread('images/03.jpeg',1) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cv2.imshow('before',gray) dst=cv2.equalizeHist(gray) cv2.imshow('now',dst) cv2.waitKey(10000) 
import cv2 import numpy as np img=cv2.imread('images/03.jpeg',1) cv2.imshow('before',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('now',result) cv2.waitKey(10000) 
import cv2 import numpy as np from grpc import Channel img=cv2.imread('images/03.jpeg',1) imgYUV =cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb) #这个函数很厉害 还可以将 RGB图片 转换为 YUV图片 cv2.imshow('before',img) channelsYUV =cv2.split(imgYUV) channelsYUV[0] =cv2.equalizeHist(channelsYUV[0]) channels= cv2.merge(channelsYUV) #再把通道合并 result =cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR) #YUV图片转换为RGB cv2.imshow('now',channels) cv2.waitKey(10000) 
既然图片需要修补,那么说明这张图片已经瓦特了,那么我们就像数学家一样思考问题,先把图片搞坏吧。
通过下面一些像素值的写入,图片已经被成功玩坏,并且,弄坏的是我弟弟的小脸蛋儿・・・哈哈哈哈哈
import cv2 import numpy as np img=cv2.imread('images/03.jpeg',1) for i in range(200,300): img[i,300]=(255,255,255) img[i,300+1]=(255,255,255) img[i,300-1]=(255,255,255) for i in range(250,350): img[250,i]=(255,255,255) img[250+1,i]=(255,255,255) img[250+2,i]=(255,255,255) cv2.imwrite('06.jpg',img) cv2.imshow('now',img) cv2.waitKey(10000) 
然后我弟弟非常不开心,希望我帮他修补,没办法,谁让我是哥哥・・
import cv2 import numpy as np img=cv2.imread('images/06.jpg',1) imgInfo=img.shape height= imgInfo[0] width=imgInfo[1] paint =np.zeros((height,width,1),np.uint8) #用for循环填充paint数组 for i in range(200,300): paint [i,300]=255 paint [i,300+1]=255 paint[i,300-1]=255 for i in range(250,350): paint[250,i]=255 paint[250+1,i]=255 paint[250+2,i]=255 cv2.imshow('paint ',paint) #接下来图片修补 imgdst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA) cv2.imshow('now',imgdst) cv2.waitKey(10000) 
左边是paint数组的内容,右边是修补之后的照片…整体效果感觉还算ok,仔细看还是可以看出来差别的,不过也算可以了。弟弟又可以去撩妹了。
总结来说,这个功能和我想象的还是有点不一样。
本质:统计每个像素灰度 出现的概率 0-255 P
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('images/03.jpeg',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 #遍历256个灰度等级 for i in range(0,255): count[i] =count[i]/(height*width) #matplot绘图 x= np.linspace(0,255,256) y=count plt.bar(x,y,0.9,alpha=1,color='b') plt.show() cv2.waitKey(10000) 
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('images/03.jpeg',1) imgInfo=img.shape height= imgInfo[0] width=imgInfo[1] countB= np.zeros(256,np.float) countG= np.zeros(256,np.float) countR= 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) countB[index_b] =countB[index_b]+1 countG[index_b] =countG[index_g]+1 countR[index_b] =countR[index_r]+1 for i in range(0,256): countB[i] = countB[i]/(height * width) countG[i] = countG[i]/(height * width) countR[i] = countR[i]/(height * width) x= np.linspace(0,255,256) #x轴坐标 y1=countB plt.bar(x,y1,0.9,alpha=1,color='b') y2=countG plt.bar(x,y2,0.9,alpha=1,color='g') y3=countR plt.bar(x,y3,0.9,alpha=1,color='r') plt.show() cv2.waitKey(10000) 