OpenCV的一个bug?该怎么解决

OpenCV的一个bug?
CvMat* a=cvCreateMat(10,10,CV_8SC1);
CvMat* b=cvCreateMat(10,10,CV_8SC1);
CvMat* c=cvCreateMat(10,10,CV_8SC1);
cvSetZero(a);
cvSetZero(b);
cvSetZero(c);
cvAdd(a,b,c);

上面这么简单代码,
cvAdd函数运行出错,为什么。

------解决方案--------------------
不算bug吧。
主要是深度问题。你用的8位有符号数,那么a矩阵中元素的值加上b矩阵对应元素的值就可能超过127(8位有符号数能表示的最大的数),从而变成了负数。这样是不允许的!OPenCV检查这个潜在的错误。当你定义的矩阵是8位有符号时,将出错。
------解决方案--------------------
探讨
哪为什么如果上面程序改成CV_8UC1就能真诚运行?
8U范围是0-255,两个8U加起来也会超过255,为什么Opencv不管?

------解决方案--------------------
探讨

引用:
哪为什么如果上面程序改成CV_8UC1就能真诚运行?
8U范围是0-255,两个8U加起来也会超过255,为什么Opencv不管?

超过255的值会自动截取低8位,8U只有8位,更高位自动丢弃了。
而LZ前面的例子中,8位编码中超过127的整数会被解读为负数--超过CVAdd参数要求。

看看基本的补码知识就能理解了。

------解决方案--------------------
探讨
引用:
图形数据用unsigned char类型的数组保存。。

经常要对图像数据进行加减操作吧?怎么保存负的加减结果?