1. 程式人生 > >OpenCV三維影象的建立和資料遍歷

OpenCV三維影象的建立和資料遍歷

建立一個如圖所示的3 X 4 X 6 三維矩陣


#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;


int main(int argc, const char * argv[]) {
    // insert code here...
    int sz[] = { 3, 4, 6};  //倒著存放,對應三維立體影象的高、寬、長
    Mat Img = Mat(3,sz, CV_16SC4, Scalar::all(0));
    cout<<"三維影象的維度:"<<Img.dims<<endl;
    cout<<"三維影象的通道數:"<<Img.channels()<<endl;
    
    cout<<"三維影象的長:"<<6<<endl;
    cout<<"三維影象的寬:"<<Img.size().width<<endl;
    cout<<"三維影象的高:"<<Img.size().height<<endl;
    
    cout<<"存放一個數字的大小 = sizeof(short) = 16/8 = "<<Img.elemSize1()<<endl;
    cout<<"存放一個畫素點的大小:"<<Img.elemSize()<<endl;
    
    cout<<"平面的大小 -> Img.step[0] = "<<Img.step[0]<<endl;  //長 ✖️ 寬 ✖️ elemSize() = 6 * 4 * 8 = 192
    cout<<"行的大小   -> Img.step[1] = "<<Img.step[1]<<endl;  //長 ✖️ elemSize() = 48
    cout<<"元素的大小 -> Img.step[2] = "<<Img.step[2]<<endl;  //元素的大小
    
    /*定址方法*/
    unsigned char * addrM012 = NULL;
    addrM012 = Img.data + Img.step[0] * 0 + Img.step[1] * 1 + Img.step[2] * 2;
    cout<<"資料開始地址:"<<(void*)Img.data<<endl;
    cout<<"Img[0,1,2] 的地址是:"<<(void*)addrM012<<endl;
    return 1;
}