openCv学习记录7

准备工作:
如果没有安装 matplotlib 的,在cmd里安装一下:
命令:cd\ 回车
命令:pip install matplotlib

import cv2 as cv
import numpy as np
#导包
from matplotlib import pyplot as plt
#准备图片
src=cv.imread("C:/Users/admin/Pictures/zyl/Tes1.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)

图像直方图

直方图主要反映图像的主要特征和次要特征

def image_hist(image):
    color=('blue','green','red')
    #enumerate用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
    for i,color in enumerate(color):
    	#calcHist函数是用来计算图像直方图的
    	#cv.calcHist([输入图像],[需要统计直方图的第几通道],None,[256],[0,256])
        hist=cv.calcHist([image],[i],None,[256],[0,256])
        plt.plot(hist,color=color)
        #xlim设置x轴的数值显示范围
        #xlim([0,256])
        plt.xlim([x轴上的最小值,x轴上的最大值])
    plt.show()

直方图的应用

直方图均衡化

#对比度增强(全图受影响)
def equalHist_demo(image):
    #必须转成gray格式
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    #equalizeHist对上面灰度图做直方图均衡化
    dst = cv.equalizeHist(gray)
    cv.imshow("equal-demo",dst)

#对比度增强(局部受影响)
def clahe_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    #实例化自适应直方图均衡化函数
    clahe = cv.createCLAHE(clipLimit=5.0,tileGridSize=(8,8))
    #进行自适应直方图均衡化
    dst= clahe.apply(gray)
    cv.imshow("clahe_demo",dst)

直方图比较

#rgbHist用于提取RGB图像中的颜色直方图,方法简单,易懂
def create_rgb_hist(image):
    h,w,c=image.shape
    rgbHist=np.zeros([16*16*16,1],np.float32)
    bsiz=256/16
    for row in range(h):
        for col in range(w):
            b=image[row,col,0]
            g=image[row,col,1]
            r=image[row,col,2]
            index=np.int(b/bsiz)*16*16+np.int(g/bsiz)*16+np.int(r/bsiz)
            rgbHist[np.int(index),0]=rgbHist[np.int(index),0]+1
    return rgbHist

def hist_compare(image1,image2):
    hist1=create_rgb_hist(image1)
    hist2=create_rgb_hist(image2)
    match1=cv.compareHist(hist1,hist2,cv.HISTCMP_BHATTACHARYYA)#巴氏距离:越小越相似
    match2=cv.compareHist(hist1,hist2,cv.HISTCMP_CORREL)#相关性:越接近于1越相似
    match3=cv.compareHist(hist1,hist2,cv.HISTCMP_CHISQR)#卡方:越小越相似
    print("巴氏距离:%d 相关性:%d 卡方:%d"%(match1,match2,match3))

直方图反向投影

在这里插入图片描述

**2d直方图怎么建立与显示**
def hist2d_demo(image):
    hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)
    #calcHist函数来计算图像直方图
    hist=cv.calcHist([image],[0,1],None,[180,256],[0,180,0,256])
    plt.imshow(hist,interpolation='nearest')
    plt.title("2D wistogram")
    plt.show()

**反向投影**
def back_projection_demo():
    #样本
    sample=cv.imread(r"C:/Users/admin/Pictures/zyl/zhuanhuan/muban/none.jpg")
    #检测目标
    target=cv.imread(r"C:/Users/admin/Pictures/zyl/zhuanhuan/Test2.jpg")
    
    #要把样本转换成HSV色彩空间
    roi_hsv=cv.cvtColor(sample,cv.COLOR_BGR2HSV)
    target_hsv=cv.cvtColor(target,cv.COLOR_BGR2HSV)
    #显示出来

    #cv.imshow("sample",sample)
    #cv.imshow("target",target)
    #直方图
    roiHisrt=cv.calcHist([roi_hsv],[0,1],None,[36,48],[0,180,0,256])#反向投影的影响度[36,48]
    cv.normalize(roiHisrt,roiHisrt,0,255,cv.NORM_MINMAX)
    #反向投影
    dst= cv.calcBackProject([target_hsv],[0,1],roiHisrt,[0,180,0,256],1)
    cv.imshow("backProjectionDem",dst)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值