意思为在"convertTOshow"函数中图像深度不能为"CV_16F"和"CV_32S"。
可以看到图中报错行的参数是''histogram",回到使用该参数的函数中查看该参数格式,如下:
图中矩阵histogram中初始化为零矩阵,初始化方式为CV_32SC1,后面通过for循环获取像素值(int型index),而计算后赋值最终所得的histogram矩阵还是32位。imshow()函数显示出的图像不可改变图像大小,只可输出8位图像。该32位矩阵在主函数中imshow无法显示,所以报错。
可以选择不显示该参数,注释掉主函数中报错的该行imshow("histogram",histogram)。
或者修改该参数格式为imshow()可以显示的格式。
变量类型和初始化方式对应如下:
char ->CV_8SC
unsigned char,uchar ->CV_8UC
unsigned short int,ushort->CV_16UC
short int->CV_16SC
int ->CV_32SC
float ->CV_32FC
double->CV_64FC
格式要前后对应,对某变量初始化时是“CV_32SC”,后续使用该变量时就需要对应int型,不能对其直接赋值char型数据(CV_8SC)。
否则,会报错 Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at.
参考文章:http://t.csdn.cn/etcFw