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)
来模拟它。另请参阅