设置用于HSV直方图计算的参数时,“ int [0]”的初始化程序太多

时间:2019-05-21 14:36:27

标签: c++ histogram hsv opencv3.3

我是opencv的新手,我想计算HSV直方图。我正在引用此链接中提供的代码。 https://docs.opencv.org/3.0-beta/doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.html

我正在使用opencv版本3.3.1,并遇到以下错误错误。

使用相同的代码,除了更改HSV直方图的图像外,我没有对代码进行任何更改。其中detectPerson是视频帧,hsv是cv mat对象。

任何人请帮助我被困在这里。

int h_bins = 50, s_bins = 60;
int histSize[] = {h_bins, s_bins};
// hue varies from 0 to 179, saturation from 0 to 255
float h_ranges[] = { 0, 180 };
float s_ranges[] = { 0, 256 };
const float* ranges[] = { h_ranges, s_ranges };
// Use the 0-th and 1-st channels
int channels[] = { 0, 1 };
cv::Mat hist_hsv, hist_hsv2;

cvtColor(detectPerson, hsv, COLOR_BGR2HSV );            
calcHist( &hsv, 1, 0, Mat(), hist_hsv, 2, histSize, ranges, true, false );
normalize( hist_hsv, hist_hsv, 0, 1, NORM_MINMAX, -1, Mat() );

错误

int channels[] = { 0, 1 };
error: too many initializers for 'int [0]'
int histSize[] = {h_bins, s_bins}
error: too many initializers for 'int [0]'
float h_ranges[] = { 0, 180 };
error: too many initializers for 'float [0]'
float s_ranges[] = { 0, 256 };
error: too many initializers for 'float [0]'

1 个答案:

答案 0 :(得分:0)

您的编译器有缺陷,尽管这使我感到困惑,因为这样的代码将是编译器回归测试套件中的第一件事。

C ++标准要求

int channels[] = { 0, 1 };等同于int channels[2] = { 0, 1 };

您的编译器似乎默认为0,以产生int channels[0] = { 0, 1 };,在标准C ++中,由于不支持零长度数组,因此必须给出诊断信息。

关闭任何声称的可变长度数组支持是否可以解决问题?