我有一个从文件加载的图像.是.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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。