Конвертировать 1D в 2D с помощью C ++ - PullRequest
0 голосов
/ 15 мая 2018

У меня проблема с преобразованием точек в 1D в 2D-изображение и наоборот. На данный момент проблем нет, когда исследуемое изображение квадратное. Тем не менее, это не работает для прямоугольных изображений. (т.е. width не равно height)

    // dimension of image
    int width = image.rows; // width
    int height = image.cols; // height

    std::vector<float> vertici_1;
    for(int x=0; x<width; x++)
        for(int y=0; y<height; y++)
            vertici_1.push_back( float(y*width+x) ); // from 2D to 1D
    ...
    cv::Point((index1/width), (index1%width)); // from 1D to 2D

Ответы [ 2 ]

0 голосов
/ 15 мая 2018
#include<iostream>
#include <stdio.h>#include <string.h>
using namespace std;int main(){enum {N=4,M=5,SZ=N*M};
    const int one_d[SZ]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0};int two_d[N][M] ;memcpy(two_d[0],one_d,SZ*sizeof(int));for( inti=0;i<N;i++){for(intj=0;j< M;j++){cout<< two_d[i][j]<<" ";cout<<endl;}}return 0;}
0 голосов
/ 15 мая 2018

Ваши петли неправильно размещены для преобразования 2D в 1D. Если вы намереваетесь сохранить ту же строку изображения, что и последовательные элементы вектора vertici_1, тогда цикл, для которого переменная цикла равна y, должен быть внешним для цикла.

std::vector<float> vertici_1;
for(int y=0; y<height; y++)
    for(int x=0; x<width; x++)
        vertici_1.push_back( float(y*width+x) );

В качестве альтернативы, если вы намереваетесь сохранить элементы одного и того же столбца в виде последовательных записей в vertici_1 (т. Е. В текущем коде равно в вашем коде), то вы должны выполнить преобразование 1D в 2D следующим образом .

cv::Point((index1 % height), (index1 / height));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...