从用户数据中创建OpenCV Mat会产生带有圆形移位列的图像

Creating OpenCV Mat from user data results in image with circular shifted columns

本文关键字:图像 数据 用户数 用户 创建 Mat OpenCV      更新时间:2023-10-16

我有一个从文件加载的图像。是。png文件吗?我将其转换为1D数组,以便通过指向该数组的指针在函数中使用。当我从1D指针创建Mat时,生成的图像看起来像是最右边的十几列,并将它们放在图像的左侧,几乎像列的圆形移位。

// 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);

结果'image'有一些右列绕到左边。知道这是怎么回事吗?

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

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