CV_IMAGE_ELEM参数赋值时注意的问题
2010-12-01 14:13
197 查看
转自:http://hi.baidu.com/wangruiy01/blog/item/041ab03e8abd33c57d1e71a0.html
CV_IMAGE_ELEM是一个宏,
#define CV_IMAGE_ELEM( image, elemtype, row, col ) /
(((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])
#define CV_MAT_ELEM( mat, elemtype, row, col ) /
(*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))
呵呵,我一直把它当一个函数用,其实本质也没有什么区别的
但要想正确的得到图像的坐标为(x,y)点的像素值,是应该这样写CV_IMAGE_ELEM(Image, uchar, y, x)
要注意像素点的坐标xy和行列值的顺序是相反的(可以仔细思考为什么)
我刚开始一直写成CV_IMAGE_ELEM(Image, uchar, x, y),结果有时候就造成了访问image越界,从而报错,花了好长时间才捣鼓出来,
不过将IMAGE的数据按照原来的样子复制到mat中可以这么写:
CV_IMAGE_ELEM(pImage, uchar, i, j) = CV_MAT_ELEM(*mat, uchar, i, j)
不用改变顺序
总之,当应用这个宏是如果老报错,就试试换个顺序,或者检查访问的地址是否越界
CV_IMAGE_ELEM是一个宏,
#define CV_IMAGE_ELEM( image, elemtype, row, col ) /
(((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])
#define CV_MAT_ELEM( mat, elemtype, row, col ) /
(*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))
呵呵,我一直把它当一个函数用,其实本质也没有什么区别的
但要想正确的得到图像的坐标为(x,y)点的像素值,是应该这样写CV_IMAGE_ELEM(Image, uchar, y, x)
要注意像素点的坐标xy和行列值的顺序是相反的(可以仔细思考为什么)
我刚开始一直写成CV_IMAGE_ELEM(Image, uchar, x, y),结果有时候就造成了访问image越界,从而报错,花了好长时间才捣鼓出来,
不过将IMAGE的数据按照原来的样子复制到mat中可以这么写:
CV_IMAGE_ELEM(pImage, uchar, i, j) = CV_MAT_ELEM(*mat, uchar, i, j)
不用改变顺序
总之,当应用这个宏是如果老报错,就试试换个顺序,或者检查访问的地址是否越界
相关文章推荐
- CV_IMAGE_ELEM参数赋值时注意的问题
- OpenCV中IplImage->imageData赋值需要注意的问题 .
- SQLPLUS中,多次调用需传入参数的SQL文件时,要注意变量赋值的问题
- OpenCV中IplImage->imageData赋值需要注意的问题
- vc++动态数组作为参数传递注意的问题
- python中将函数赋值给变量时需要注意的一些问题
- foreach 使用&引用赋值要注意的问题
- 关于java数组中某个元素用等号赋值给中间变量需要注意的问题。
- alert(参数),参数为字符串类型时需要注意的问题。
- C++关于函数声明和定义中参数赋值为0调用问题演示
- action间传多个参数时注意问题
- 加载dataGrid时候的注意事项,参数重复问题
- highcharts中series带参数的赋值问题
- Access使用参数化UPDATE数据时,数据无法更新的问题,要按照参数顺序赋值
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是#, #{}和${}的区别以及order by注入问题
- iOS设置UIButton的titleLabel和imageView需要注意的一些小问题
- 关于C51的中断函数要注意的几个问题 -----中断中调用函数参数错误问题
- 参数赋值引起的问题
- jQuery调用WebService返回JSON数据及参数设置注意问题
- 数组初始化与赋值注意的问题