Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 函数calcHist()给了我们什么_Image_Opencv_Computer Vision_Histogram_Entropy - Fatal编程技术网

Image 函数calcHist()给了我们什么

Image 函数calcHist()给了我们什么,image,opencv,computer-vision,histogram,entropy,Image,Opencv,Computer Vision,Histogram,Entropy,我的问题是,当我们规范化直方图时,是否有任何内置函数,如果不是很明显,我们可以使用函数calcHist(),计算图像的直方图,但是规范化直方图的公式是Nk/N,那么calcHist在这个公式中返回给我们的是N,或者我们必须自己计算,它在熵公式中扮演什么角色,我不确定我是否明白你的问题。但这里有一个简单的例子,说明如何使用OpenCV获得灰度图像的l1归一化直方图 在图像的情况下,N是可以简单地通过乘以图像的宽度和高度来计算的像素数。然后,只需将直方图除以N #包括 #包括 使用名称空间cv; i

我的问题是,当我们规范化直方图时,是否有任何内置函数,如果不是很明显,我们可以使用函数
calcHist()
,计算图像的直方图,但是规范化直方图的公式是
Nk/N
,那么
calcHist
在这个公式中返回给我们的是
N
,或者我们必须自己计算,它在熵公式中扮演什么角色,我不确定我是否明白你的问题。但这里有一个简单的例子,说明如何使用OpenCV获得灰度图像的l1归一化直方图

在图像的情况下,
N
是可以简单地通过乘以图像的宽度和高度来计算的像素数。然后,只需将直方图除以
N

#包括
#包括
使用名称空间cv;
int main(int argc,字符**argv)
{
Mat img=imread(argv[1],CV\u LOAD\u IMAGE\u灰度);
Mat hist;
int通道[]={0};
int histSize[]={32};
浮动范围[]={0,256};
常量浮点*范围[]={range};
calcHist(&img,1,channels,Mat(),//不使用掩码
历史,1,历史大小,范围,
true,//直方图是一致的
假);
Mat histNorm=历史/(img.rows*img.cols);
返回0;
}
为了得到这个例子,我修改了OpenCV中的一个

如果要使用此直方图计算熵,可以执行以下操作:

双熵=0.0;

对于(int i=0;iI要减去两个有足够时间间隔的帧,以便熵清楚地表示发生变化的区域,
if(binEntry==0.0)
如果它导致无限大,你能做些什么?就像我在我的例子中所做的那样处理它们:忽略空的垃圾箱。如何添加时间间隔?关于这方面的任何信息?你只需在帧上保存,等待一定的时间,然后保存另一帧。就这么简单。如果你有问题,也许你可以打开另一个问题,显示w到目前为止,您有什么问题?这意味着您的编译器不支持它。但您可以通过计算
log(value)/log(2.0)
来模拟它。另请参阅