我有一个从文件加载的图像。是 .png 吗?我将其转换为一维数组,以便通过指向数组的指针在函数中使用。当我从 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);
结果“图像”的一些右列环绕在左侧。知道这是怎么回事吗?
图像存储在 opencv 中,每个新行都从 32 位边界开始。
如果列数 * 像素大小不是 4 的倍数,则图像的每一行都会被填充。
你应该使用cv::mat ptr(row)
获取指向每行开头的指针,然后沿行循环。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)