解决Error:Assertion failed (src_depth != CV_16F \\&\\& src_depth != CV_32S) in convertToShow.

意思为在"convertTOshow"函数中图像深度不能为"CV_16F"和"CV_32S"。

解决Error:Assertion failed (src_depth != CV_16F \\&\\& src_depth != CV_32S) in convertToShow._第1张图片

可以看到图中报错行的参数是''histogram",回到使用该参数的函数中查看该参数格式,如下:

解决Error:Assertion failed (src_depth != CV_16F \\&\\& src_depth != CV_32S) in convertToShow._第2张图片

图中矩阵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

你可能感兴趣的:(计算机视觉,opencv,人工智能,c++)