Как/Почему imagedata хранится как символ - OpenCV

Рекурсивный пролог

fac(0,1).
fac(N,X) :- N1 is N -1, fac(N1, T), X is N * T.

Хвост Рекурсивный пролог

fac(0,N,N).
fac(X,N,T) :- A is N * X, X1 is X - 1, fac(X1,A,T).
fac(N,T) :- fac(N,1,T).
10
задан zenna 14 November 2009 в 16:43
поделиться

1 ответ

Здесь есть диаграмма здесь , в которой резюмируются различные различные лицензии FOSS, а в первом столбце комментарии по связыванию проприетарного программного обеспечения. Он не выглядит особенно актуальным и не включает лицензионную версию, но с него все же можно начать.

s важно , чтобы вы выполняли арифметические операции с указателем в байтах (или uchar , т.е. unsigned char ), поскольку OpenCV имеет тенденцию заполнять строки изображений с дополнительными байтами для повышения эффективности (особенно для двойных изображений).

Таким образом, даже если элемент double составляет 8 байтов, а у вас, скажем, 300 строк, не гарантируется, что строка закончится на 8 * 300 или 2400 байтах, поскольку OpenCV может заполнить конец.

Таким образом, это не позволяет вам инициализировать указатель на первый элемент изображения и затем использовать ptr [y * img-> height + x] для доступа к элементам, поскольку каждая строка может иметь более ] 8 * (y * img-> height) байт.

Вот , почему в примере кода каждый раз вычисляется указатель на каждую строку, используя img-> widthStep , который представляет истинный размер каждой строки в байтах.

OpenCV 2.0

Если вы используете класс Mat , вы можете сделать то же самое в следующих строках:

cv::Mat img(300,300,CV_64FC1);
for( int y=0; y<img.rows; y++ ) 
    {
       double* ptr = reinterpret_cast<double*>(img.data + y * img.step);
       for( int x=0; x<img.cols; x++ ) 
       {
          ptr[x] = double(255);
       } 
    }
cv::namedWindow("SO");
cv::imshow("SO",img);
cv::waitKey();

где img.step - это расстояние между последовательными строками в байтах

И если вы хотите получить прямой доступ к элементу (медленнее):

img.at (y, x)

16
ответ дан 3 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: