210_Python+OpenCV_06_图像直方图(histogram)HOG-全局/局部均衡化/直方图比较/反向投影_linda.serious的博客-程序员ITS304

技术标签: 230_Semantic Segmentation  Z-归档_OpenCV  

一、python+OpenCV_06_图像直方图(histogram)HOG

0-255个像素值,每个值出现的频次是多少
在这里插入图片描述
256个bin意思就是有256个竖的条条,bin-size是64,意思是以64为bin宽度,统计频次

# -*- coding:utf-8 -*-
# Linda Li 2019/8/25 15:44 cv_28_图像直方图 PyCharm

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def plot_demo(image):
    """
    image.ravel()统计频次的
    bins 256,256条直方
    range[0,256]
    """
    plt.hist(image.ravel(), 256, [0, 256])
    plt.show()


print("-------hello python--------")
src = cv.imread("../cv_02/cv_193.jpeg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

plot_demo(src)

cv.waitKey(0)
cv.destroyAllWindows()



在这里插入图片描述

二、直方图的API

在这里插入图片描述
在这里插入图片描述在这里插入图片描述整由于张图片比较偏白色,所以三个通道都在255左右取得波峰,把这些值抠出来,其实就可确定人的位置,背景和前景

# -*- coding:utf-8 -*-
# Linda Li 2019/8/25 15:44 cv_28_图像直方图 PyCharm

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def plot_hist(image):
    """绘制三个通道的图像,这个是个第三方的API模板"""
    # 三个颜色 i = 0, 1, 2
    color = ('blue', 'green', 'red')

    # 绘制每一个颜色对应的直方图
    for i, color in enumerate(color):

        # 计算直方图
        hist = cv.calcHist(image, [i], None, [256], [0, 256])
        plt.plot(hist, color=color)
        plt.xlim([0, 256])
        plt.show()


print("-------hello python--------")
src = cv.imread("../cv_02/cv_291.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

plot_hist(src)

cv.waitKey(0)
cv.destroyAllWindows()

三、直方图均值化——增强对比度(全局)

在这里插入图片描述
在这里插入图片描述

# -*- coding:utf-8 -*-
# Linda Li 2019/8/25 17:37 cv_30_直方图均衡化 PyCharm

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def equal_hist(image):
    """直方图均值化,是图像增强的一个手段"""

    # opencv中的直方图均衡化都是基于灰度图像的,所以要先将图像变成灰度图像
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    dst = cv.equalizeHist(gray)
    cv.imshow("equal_hist", dst)


print("-------hello python--------")
src = cv.imread("../cv_02/cv_30.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

equal_hist(src)

cv.waitKey(0)
cv.destroyAllWindows()

四、直方图均值化——增强对比度(局部)

在这里插入图片描述
全局的直方图均衡化有些失真

# -*- coding:utf-8 -*-
# Linda Li 2019/8/25 17:37 cv_30_局部直方图均衡化 PyCharm

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def clahe_demo(image):
    """局部自适应的直方图均衡化"""

    # openCv中的直方图均衡化都是基于灰度图像的,所以要先将图像变成灰度图像
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

    # clipLimit指的是差异的大小, 8 * 8 的区域
    clahe = cv.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8))

    dst = clahe.apply(gray)
    cv.imshow("clahe_demo", dst)


print("-------hello python--------")
src = cv.imread("../cv_02/cv_30.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

clahe_demo(src)

cv.waitKey(0)
cv.destroyAllWindows()

五、直方图的比较

在这里插入图片描述
解释

  1. 相关性 =1
  2. 卡方
  3. 相交性
  4. 巴氏距离
    == 两张图片如果相似度很高的话,2,3,4都应该很小==
    找相似的图片可以通过做出两张图片的两个直方图排除50%,剩下的可以考虑用比较高级的特征,比如纹理
    ,边缘,角度,梯度特征再比较

在这里插入图片描述
又测试了一张模糊放大的照片相似度如下

在这里插入图片描述
巴氏距离:0.060010098789997, 相关性: 0.9992416574913615, 卡方: 2503696.7459648685

# -*- coding:utf-8 -*-
# Linda Li 2019/8/25 17:37 cv_30_局部直方图均衡化 PyCharm

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


def create_rgb_hist(image):
    h, w, c = image.shape

    # 初始化1维度
    rgb_hist = np.zeros([16*16*16, 1], np.float32)

    # bins bin的数量 16
    bsize = 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]

            # 把float转换为int之后才可以做index,每一个出现的是在哪个颜色里面,就给他加一
            index = np.int(b/bsize) * 16 * 16 + np.int(g/bsize) * 16 + np.int(r/bsize)

            # 本来都是0,加上1
            rgb_hist[np.int(index), 0] = rgb_hist[np.int(index), 0] + 1

    return rgb_hist


def hist_compare(image1, image2):
    hist1 = create_rgb_hist(image1)
    hist2 = create_rgb_hist(image2)

    # 1.巴氏距离
    match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)

    # 2.相关性
    match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)

    # 3.卡方-不太好度量,还是用1,2比较多
    match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)

    print("巴氏距离:%s, 相关性: %s, 卡方: %s" % (match1, match2, match3))


print("-------hello python--------")
image1 = cv.imread("../cv_02/cv_193.jpeg")
image2 = cv.imread("../cv_02/cv_181.jpg")
image3 = cv.imread("../cv_02/cv_24r1.png")
cv.imshow("image1", image1)
cv.imshow("image2", image2)
cv.imshow("image3", image3)
# hist_compare(image1, image2)
hist_compare(image1, image3)


cv.waitKey(0)
cv.destroyAllWindows()

六、直方图反向投影

在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44304362/article/details/99888175

智能推荐

小提琴图-理论篇_lizz2276的博客-程序员ITS304_小提琴图怎么分析

前几天在seaborn中看到了这个图,还以为是什么树叶图,一开始就是觉得图挺有意思,但是并不知道是什么意思,这里就整理一下我们先看个例子小提琴图和箱线图有点儿类似,用来显示数据分布和概率密度这种图结合了箱线图和密度图的特征,用来显示数据的分布形状中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。参考文章:小提琴图这个图中间那一块就是箱线图,外面包裹着一个密度图2人点赞数据分析更多精彩内容,就在简书A...

企业微信怎么输入服务器id,在后台设置企业微信信息时,如何获得企业ID( CorpId )和 Secret ?..._weixin_39995943的博客-程序员ITS304

**一、登录企业微信管理后台**点击下方的链接,前往企业微信管理后台,使用管理员的企业微信扫码登录[https://work.weixin.qq.com/](https://work.weixin.qq.com/)**二、获取企业ID**( CorpId )在企业微信管理后台点击“我的企业”,如下图所示。![](https://txc.gtimg.com/data/174823/2020/0706...

python seaborn_【Python可视化3】Seaborn之箱线图与小提琴图_weixin_39640090的博客-程序员ITS304

Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。但应强调的是,应该把Seaborn视为matplotlib的补充,而不是替代物。注:所有代码均在IPython notebook中实现box...

宇时 pixhawk APM PX4专用3G/4G数传电台,摆脱距离的限制,还是4G数传好_看海冲浪的博客-程序员ITS304

玩了好几年的航模了,至今入坑快4年有余了,玩了自制飞控,玩别人的飞控,玩了多旋翼,玩固定翼。好东西天天都有新的,飞机还是该飞丢飞丢,该炸机就炸机,绝不留情!最进两年才转入固定翼的坑,感觉玩多旋翼太没有新意了,已经被玩烂了,随便找个Dji的飞机出来,都比自己DIY出来的飞机稳定。还便宜!多旋翼操作的傻瓜化,导致没有太多的玩机乐趣,固定翼操作难度大,速度快,非常带感!说了这么多,固定翼最大的问题还

php限制按钮只能点一次,JavaScript_防止按钮在短时间内被多次点击的方法,如果一个按钮可以在短时间内 - phpStudy..._格林的雪国的博客-程序员ITS304

防止按钮在短时间内被多次点击的方法如果一个按钮可以在短时间内多次点击,那么有可能会被用户恶意点击,为防止这种情况,可以设定一定时间内只能点击一次,其他时间禁止点击按钮。代码如下:Js定时事件/*timeId=window.setTimeout("method()",1000); window.clearTimeout(timeId);定时执行timeId=window.setInterval("m...

网络加载框架:Volley_Loyah的博客-程序员ITS304

前言开发app中,使用的网络框架多种多样,其中包括:1、HttpClient(听说过,没用到过),HttpURLConnection2、AsyncTask3、OkHttp4、Retrofit5、Volley以上等等框架,今天就介绍Volley框架的原理与好处。。。(请准备好瓜子)1、简介Volle于2013年Google I/O大会上推出的一个新的网络通信框架,在性能方面进行了大幅度的调整。2、如...

随便推点

小提琴1234567位置图解_小提琴1234567位置图解 琴不在身边不然可以直接给你看_杜绍斐 DUSHAOFEI的博客-程序员ITS304

聊到小提琴,我们很多人都知道,有人问小提琴1234567位置图解,另外,还有人问小提琴1234567位置图解,这到底是咋回事?其实小提琴1234567位置图解呢,今天我们就来看看小提琴1234567位置图解,一起来了解下吧。小提琴1234567位置图解◆小提琴有4根弦,从低到高是以五度关系增高其空弦的音高的,所以它的空弦音从低到高是5263。这样每根弦上就有了不同的排音规律,请看下图,便可一目了然...

学废了吗_后台管理项目必备_码者_荣耀的博客-程序员ITS304

vue2 + elementUI + echarts1.侧边栏菜单选中后刷新页面, 保持状态2.侧边栏折叠/展开后刷新页面, 保持状态 a.将collapse:false保存在vuex的state中, 在页面调用 b.App.vue页面页面刷新时,如何保持原有vuex中的state信息 - 浅笑· - 博客园3.隐藏echarts滑轮两侧的字dataZoom-slider.textStyle. color :"transpare...

LSA和PLSA_LZXandTM的博客-程序员ITS304_plsa

1.词袋模型   词袋模型(BOW, Bag-of-Words) 模型是NLP领域中的一个基本假设,一个文档(document)被表示为一组单词(word/term)的无序组合,而忽略了语法或者词序的部分,存在缺陷:  稀疏性: 对于大词典,尤其是包括了生僻字的词典,文档稀疏性不可避免;  多义词: BOW模型只统计单词出现的次数,而忽略了一个词可能存在多种含义,一词多义;  同义

python设置横坐标的值_python中画图如何修改横坐标大小?_桑晗博的博客-程序员ITS304

原标题:python中画图如何修改横坐标大小? 用matplotlib画二维图像时,默认情况下的横坐标和纵坐标显示的值有时达不到自己的需求,需要借助xticks()和yticks()分别对横坐标x-axis和纵坐标y-axis进行设置。import numpy as npimport matplotlib.pyplot as pltx = range(1,13,1)y = range(1,13,1...

论文阅读《A Large Dataset to Train Convolutional Networks for Disparity, Optical Flow, and Scene Flow Es》_CV科研随想录的博客-程序员ITS304

论文地址:https://arxiv.org/abs/1512.02134v1背景  光流估计(optial flow estimation)可以在一个大型合成数据集上训练,受此启发,本文将光流估计模型扩展到视差估计(disparity estimation)和场景流估计(Scene Flow estimation),在大型合成数据集上使用CNN来解决视差估计与场景流估计问题;网络结构DispNet是基于FlowNet的结构进行小改而来,网路的整体与FlowNet的结构是一致的;FlowNet

Android AT指令检查4G模块_HappinessCat的博客-程序员ITS304

一、检查sim卡功能是否可用1、首先打开一个终端,查询sim卡适配节点,如下图所示ttyUSB2就是适配节点adb shellcd dev/ll2、再打开一个终端,输入adb shellcat /dev/ttyUSB23、上面打开的终端不要关闭,再次打开一个新的终端,输入adb shellecho -e "AT+CFUN? \r\n" > ...

推荐文章

热门文章

相关标签