其他分享
首页 > 其他分享> > c-根据用户数据创建OpenCV Mat会导致图像出现圆移位列

c-根据用户数据创建OpenCV Mat会导致图像出现圆移位列

作者:互联网

我有一个从文件加载的图像.是.png吗?我将其转换为一维数组,以通过指向该数组的指针在函数中使用.当我从1D指针创建Mat时,生成的图像看起来像是占据了最右端的大约12列,然后将它们放在图像的左侧,几乎就像是列的圆形移位.

// SAMPLE CODE
Mat img  = imread(argv[1], CV_LOAD_IMAGE_ANYDEPTH);     // 16U1 png
int ncols   = img.cols;
int nrows   = img.rows;

//--Create input array and pointer--
uint16_t rawImage[nrows*ncols];
uint16_t *rawImage_ptr = rawImage;

//Assign value to array
for (int i=0;i<(ncols*nrows);i++){
 *(rawImage_ptr+i) = img.at<uint16_t>(i);
}

// Create Mat from pointer
Mat image(nrows, ncols, CV_16UC1, &rawImage_ptr);

结果“图像”的一些右列环绕在左侧.知道这里发生了什么吗?

解决方法:

图像存储在opencv中,每个新行都从32位边界开始.
如果cols *像素大小的数量不是4的倍数,则将填充图像的每一行.

您应该使用cv :: mat ptr(row)获取指向每一行开头的指针,然后沿着一行循环.

标签:mat,user-data,c,opencv
来源: https://codeday.me/bug/20191012/1898013.html