OpenCV中行数(rows)和列数(cols)对应高(height)和宽(width),由于OpenCV1.0和OpenCV2.0的代码风格有所不同,所以在处理行和列这个细节上面需要多加注意,特别是函数参数的顺序,到底是先行后列还是先列后行。下面是我总结的一些情况:
情况一(定义IplImage*):
IplImage*dst = NULL;
dst =cvCreateImage(cvSize(600, 480), IPL_DEPTH_8U, 3);
这里创建的dst是480行600列的,先列后行。
情况二(定义Mat):
Mat dst;
dst =Mat(480, 600, CV_8UC3);
这里创建的dst同样是是480行600列的,但是先行后列。
情况三(定义感兴趣区域):
RectROI_rect;
ROI_rect.x= 10;
ROI_rect.y= 20;
这里表示定义的感兴趣区域(矩形)的左上角像素的坐标(x,y)是(10,20),即位于第20行,第10列。
这些细节很重要,当使用嵌套的for循环遍历图片的时候,如果没有注意行列这一细节的话,很有可能会出现指针出错的情况。
本文详细解析了在OpenCV中处理图像时,如何正确理解行数(rows)和列数(cols)的概念及其与高度(height)和宽度(width)之间的对应关系。尤其针对不同版本的OpenCV及不同数据结构(如IplImage与Mat)在定义图像尺寸时的差异进行了说明,并给出了实例。
1万+

被折叠的 条评论
为什么被折叠?



