图像处理(四)

直方图绘制

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值