直方图绘制
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蒙版 4 直方图size 5 直方图中各个像素的值
hist=cv2.calcHist([image],[0],None,[256],[0.0,255.0])
minV,maxV,minL,maxL=cv2.minMaxLoca(hist) # 获得最大值最小值 以及最大值最小值索引
histimage=np.zeros([256,256,3],np.uint8)
for h in range(256):
internormal=int(hist[h]*256/maxV)
cv2.line(histimage,(h,256),(h,256-internormal),color)
cv2.imshow(windowName,histimage)
return histimage
img=cv2.imread('image1.jpg',1)
channels=cv2.split(img) # 分解 RGB ->R G B
for i in range(0,3):
imagehist(channels[i],31+i)
cv2.waitKey(0)
灰度图像直方图均衡化
import cv2
import numpy as np
img=cv2.imread('image1.jpg',1)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2RGBA)
cv2.inshow('src',gray)
dst=cv2.equalizeHist(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)
彩色图像直方图均衡化
import cv2
import numpy as np
img=cv2.imread('image1.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('image1.jpg',1)
imgYUV=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)
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)
图片破坏与修复
# 图片破坏
import cv2
import numpy as np
img=cv2.imread('image1.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,300):
img[250,i]=(255,255,255)
img[250+1,i]=(255,255,255)
img[250-1,i]=(255,255,255)
cv2.imwrite('damage.jpg',img)
cv2.imshow('dst',img)
cv2.waitKey(0)
import cv2
import numpy as np
img=cv2.imread('damage.jpg',1)
imginfo=img.shape
height=imginfo[0]
width=imginfo[1]
paint=np.zeros((height,width),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,300):
paint[250,i]=255
paint[250+1,i]=255
paint[250-1,i]=255
cv2.imshow('paint',paint)
imgdst=cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA)
cv2.imshow('imgdst',imgdst)
cv2.waitKey(0)
# 图片修复
# 怀图 2 需要修补部分的数组 3 调用inpaint修复
import cv2
import numpy as np
img=cv2.imread('damage.jpg',1)
imginfo=img.shape
height=imginfo[0]
width=imginfo[1]
paint=np.zeros((height,width),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,300):
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('imgdst',imgdst)
cv2.waitKey(0)