神奇。cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0。
cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0的细节探究。
import cv2
import matplotlib.pyplot as plt
import numpy as npimg=cv2.imread("gray.jpg",cv2.IMREAD_GRAYSCALE) #灰度模式加载。
print(img.shape)
H=np.zeros(256)
for i in range(img.shape[0]):for j in range(img.shape[1]):**if img[i,j]!=255:** #灰度图,灰度值为255的像素个数不计算。最后默认为0.H[img[i,j]]=H[img[i,j]]+1
#print(H.astype(np.int32))
plt.plot(H.reshape(256,1),color='b')
#这个是自己算的亮度直方图中像素个数统计信息。灰度值为255的像素个数不统计之后,和cv2.calcHist()统计信息返回结果一样。可能是因为255代表白色,所以灰度图不需要统计白色像素值。
histb=cv2.calcHist([img],[0],None,[256],[0,255])#统计图像直方图信息。
print(histb.shape)
print(histb.astype(np.int32))
#histb==H.reshape(256,1)
print(histb.sum())#img.shape=(320, 518)。这个结果乘出来是165,760。
#histb.sum()=157932.0.
#也就是有7828个灰度值为255的像素点没被统计。结果7828也非常好计算,
count=0
for i in range(img.shape[0]):for j in range(img.shape[1]):if img[i,j]==255: count=count+1
OK!
后来我发现我上边的错了,cv2.calcHist的range参数是[0,255]的时候,255灰度值的像素个数统计为0,但是参数是[0,256]的时候,255灰度值的像素个数统计为正确的个数。(range参数代表像素值的取值范围。)
改一下参数就会发现这个有趣的地方:
histb=cv2.calcHist([img],[0],None,[256],[0,256])#统计图像直方图信息。
这个得到的结果对比:上图是原来[0,255]的数据,下图是[0,256]的数据。
根据这个结果,我认为range参数取得是左闭右开区间,当参数是[0,255]时候,histb形状是(256,1),所以histb的第256个元素的统计个数一定为0。然而参数是[0,256]时候,histb的第256个元素就会得到像素值的统计个数。
接着,查看opencv/ calcHist函数源码中:
//位深度为8位的图像,一个基础元素的范围都在**[0,255)**内。
(这里某博主注释的是[0,255),看来是不计算255的。)
const int low = 0, high = 256;
/*
*/
for( j = low; j < high; j++ )// 灰度值j 从0到255 循环{/* */}
但是从源码这个for遍历来看,是要计算255的。
参考(https://blog.csdn.net/zhjm07054115/article/details/24498839)
这是阿婆主小白猜测,希望有大佬指正错误。
神奇。cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0。相关推荐
- 详解为什么OpenCV的直方图计算函数calcHist()计算出的灰度值为255的像素个数为0
在使用OpenCV的直方图计算函数calcHist()时,发现灰度值为255的像素个数总是为0. 哪怕图像中灰度值为255的像素个数不为0,使用OpenCV的直方图计算函数calcHist()计算出的 ...
- Opencv中的cv2.calcHist()函数的作用及返回值
在讨论其返回值前,我们先来介绍以下calcHist()函数的用法: cv2.calcHist()函数 cv2.calcHist()函数的作用:通过直方图可以很好的对整幅图像的灰度分布有一个整体的了解, ...
- c++中函数放在等号右边_如何从C或C++中的函数返回多个值?
新程序员通常在寻找从函数返回多个值的方法.不幸的是,C和C++不允许直接这样做.但是幸运的是,通过一些巧妙的编程,我们可以轻松实现这一目标. 下面是从C函数中返回多个值的方法: 通过使用指针. 通过使 ...
- Python学习之函数返回多个值
Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址 内存地址就是指针. ...
- python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...
继续来说函数的后续知识点,主要是函数返回多个值,匿名函数,三元运算符,算是比较小的知识点. 一.汉字转拼音模的使用 1.安装模块 #install xpinyin 2.如果使用 结果: 二.函数返回多 ...
- python函数返回多个值_python函数返回多个值的示例方法
python可以返回多个值,确实挺方便 函数里的return只能返回一个值,但是返回类型是没是限制的 因此,我们可以"返回一个 tuple类型,来间接达到返回多个值". 例子是我在 ...
- Java中如何实现一个函数返回多个值
由于java中没有指针,不能像C++一样通过指针的方式实现一个函数返回多个值,因此在java中必须采用变通的方式解决,常用的方式有以下几种: 1.封装一个实体类,将要返回的值封装进去: 2.通过map ...
- C语言通过指针间接的实现函数返回多个值
C语言通过指针间接的实现函数返回多个值 本例题中通过把指针作为函数参数来传递,依次达到改变变量的值的目的,最后实现一个函数返回两个变量的值 int *X,*X应该被看成一个整体来看,表示一个整形. # ...
最新文章
- SQL 语句转换格式函数Cast、Convert
- php rdkafka实例,linux下php扩展kafka的实例分享
- asp.net三层架构应用详解【收录】
- Nginx配置成系统服务
- pyspider 安装 和 快速开始
- 荔枝派 Nano 全志 F1C100s 编译运行 Linux ubuntu并升级gcc
- react的导出是怎么实现的_不到一百行代码,我们来实现一个简简简简简简简简简简版react库...
- Linux日志系统与日志库zlog
- Xpose框架的入门学习
- 腾讯软件测试笔试题西安,腾讯软件测试笔试题题库
- 万能Markdown数学公式
- 很多程序员编码时都戴耳机,到底在听什么?
- chrome广告过滤器插件-Adblock Plus
- Trx-address和交易的address
- 东北人都难懂的东北话
- Java中Thread类的start()和run()方法
- LQ0215 绳圈【DP】
- S60手机开发平台构建-塞班9.2+Carbide.c++
- 【Python三体问题】
- 20141226-网易有道实习反思