簡體   English   中英

在openCV /圖像處理中創建MAT類型的3維數組的分段錯誤

[英]Segmentation Fault in creation of 3-dim array of type MAT in openCV/image Processing

我的圖像尺寸為576x720,我將其分成小部分,從1.40625x1.125到288x360,在每次迭代中使用不同的roi_width和roi_height(從k = 9到k = 1)。 我想創建一個類型為Mat dst_n(3維,k,x_dim(沿X的窗口數)和y_dim(沿Y的窗口數)的數組,但是在創建時會出現分割錯誤,如何正確分配?

    int a,b;

    a = log_base_n(image1.cols,2);
    b = log_base_n(image1.rows,2);
    double roi_width = (image2.cols)/pow(2.0,a);
    cout << roi_width << endl;
    double roi_height = (image2.rows)/pow(2.0,a);
    cout << roi_height << endl;

    double roi_left = roi_width/2.0;
    cout << roi_left << endl;
    double roi_top  = roi_height/2.0;
    cout << roi_top << endl;

    for(int k=9 ;k>0;k--){

        int x_dim = 2*pow(2.0,k)-1;
        int y_dim = 2*pow(2.0,k)-1;
        cout << "working"<< endl;
        **Mat dst_n[k][x_dim][y_dim];**       // This line is giving segmentation fault. I think, its due to some dynamic allocation, because when I assigned Mat dst[3][3], it was working fine.


        **vector<KeyPoint> vec_keypoints_n[k][x_dim][y_dim];
        Mat descriptors_n[k][x_dim][y_dim];
        Mat bowDescriptor_n[k][x_dim][y_dim];
        double base_test_n[k][x_dim][y_dim];**
        for (int j=0;j<y_dim;j++){
            cout << "working"<< endl;
            for (int i=0;i<x_dim;i++){
                cout << "working"<< endl;
                image2(Rect(roi_left*i,roi_top*j,roi_width,roi_height)).copyTo(dst_n[k][j][i]);
                detector.detect(dst_n[k][j][i],vec_keypoints_n[k][j][i]);
                cout << vec_keypoints_n[k][j][i].size() << endl;
                sift_extractor1->compute(dst_n[k][j][i],vec_keypoints_n[k][j][i],descriptors_n[k][j][i]);
                bowDE.compute(dst_n[k][j][i],vec_keypoints_n[k][j][i], bowDescriptor_n[k][j][i]);
                base_test_n[k][j][i] = compareHist(bowDescriptor1,bowDescriptor_n[k][j][i],0);

                                 cout << "base_test_n = " << base_test_n[k][j][i] << endl;
            }
            cout << "working"<< endl;
        }
        cout << "working"<< endl;
        roi_width = roi_width*2;
        roi_height = roi_height*2;
        roi_left = roi_left*2;
        roi_top = roi_top*2;
    }

我正在從Image中提取區域,並且要將其存儲在數組中。 因此,我想創建一個Mat類型的數組,其中數組元素可以存儲矩陣(圖像的一部分)。

之前,我已經通過使用下面提到的代碼成功完成了此操作:dst是一個二維數組,使用命令image2(Rect(roiLeft * i,roiTop * j,roiWidth,roiHeight))。copyTo(dst [j ][一世]);

同樣,我試圖為可變窗口大小包括一個變量k,並創建了MAT類型的3-D數組,但是沒有用。 我不知道是什么問題,或者如何使用您的方法?

Mat dst[3][3];
vector<KeyPoint> vec_keypoints[3][3];
Mat descriptors[3][3];
for (int j=0;j<3;j++){
    for (int i=0;i<3;i++){
        image2(Rect(roiLeft*i,roiTop*j,roiWidth,roiHeight)).copyTo(dst[j][i]);
        detector.detect(dst[j][i],vec_keypoints[j][i]);
        cout << vec_keypoints[j][i].size() << endl;
        sift_extractor1->compute(dst[j][i],vec_keypoints[j][i],descriptors[j][i]);

    }
}




Mat dst_n[k][x_dim][y_dim];  // you cannot create a Mat like this

要在OpenCV中創建3D矩陣,您應該使用

int sizes[] = { k, x_dim, y_dim};
Mat matrix = Mat(3, sizes, CV_64FC1);
Mat dst_n[k][x_dim][y_dim];  // you cannot create a Mat like this

要在OpenCV中創建3D矩陣,您應該使用

int sizes[] = { k, x_dim, y_dim};
Mat matrix = Mat(3, sizes, CV_64FC1);

暫無
暫無

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

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