关于opencv中Mat和CvMat数据结构中的内存对齐的小实验

opencv中矩阵数据类型 Mat和CvMat,IplImage为了计算方便,会对数据进行内存对齐,故本人经常操作Mat和Iplimage进行数据的赋值,一直很小心使用memcpy进行数据的拷贝来替代循环操作,另外使用指针诸如 uchar* ptr = mat.data, uchar* ptr = img->imageData 操作也要小心。

测试代码:

IplImage* img = cvLoadImage("D:\\MM.jpg");
uchar* data = new uchar[3 * img->height * img->width];
memcpy(data, img->imageData, 3 * img->height * img->width);
cv::Mat mat(img->height, img->width, CV_8UC3, data);
cv::imshow("Test", mat);

这里MM.jpg 是一个 960 *600大小的图像数据,从分辨率上看,加载进opencv后,并不需要进行对齐,故得到的结果是这样的:

这里显示正常。

但是如果我裁剪图像到323*361,来迫使其不是偶数,显示将会这样:

数据已经混乱!

但是令人奇怪的是,如果不使用 IplImage和cvLoadImage来加载图片,而使用Mat 和 imread的话,这个问题就不存在了!也许新生成的Mat数据都是连续的吧。

 

转载于:https://www.cnblogs.com/XYZYY/p/9680331.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值