簡體   English   中英

如何使用OpenCV C ++將3D矩陣划分為2D矩陣束

[英]How to divide 3D matrix into bunches of 2D matrix with opencv C++

我有一個4 * 5 * 6 3D矩陣。 我想將其分為6個2D矩陣。 目的是對這些2D矩陣進行數據運算並獲得結果。 嘗試過row(),rowRange(),我遇到了錯誤。 現在沒有任何線索。 有人提出更好的主意嗎? 謝謝〜

請記住,最后一個索引變化最快,所以也許您的意思是您有一個6 * 5 * 4的Mat,並且希望將其分為六個5x4的Mat。 根據文檔 “ 3維矩陣按平面存儲”。

但是,假設您的3D Mat是這樣創建的:

int dims[] = {4, 5, 6};
Mat m3(3, dims, CV_8UC1, data);

您可以執行以下操作來執行您要求的操作(但可能不是您真正想要的操作):

Mat m2(4, 30, CV_8UC1, m3.data);
Mat m2x6 = m2.reshape(6);
std::vector<cv::Mat> channels;
cv::split(m2x6, channels);

但是,要從m3中提取4幅圖像,這些圖像具有5行x 6列,請執行以下操作:

Mat p0(5, 6, CV_8UC1, m3.data + m3.step[0] * 0);
Mat p1(5, 6, CV_8UC1, m3.data + m3.step[0] * 1);
Mat p2(5, 6, CV_8UC1, m3.data + m3.step[0] * 2);
Mat p3(5, 6, CV_8UC1, m3.data + m3.step[0] * 3);

因為在OpenCV中對3D Mats的支持不是很好,所以請避免使用它們。 一種替代方法是使用具有多個通道的2D Mat。 這通常更容易處理。

暫無
暫無

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

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