簡體   English   中英

根據用戶數據創建OpenCV Mat會導致圖像出現列移位

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

我有一個從文件加載的圖像。 是.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)獲取指向每一行開頭的指針,然后沿着一行循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM