首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

OpenCV的一个bug?该怎么解决

2012-04-16 
OpenCV的一个bug?CvMat* acvCreateMat(10,10,CV_8SC1)CvMat* bcvCreateMat(10,10,CV_8SC1)CvMat* ccv

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类型的数组保存。。

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

热点排行