Rino256 0 Жалоба Опубликовано December 2, 2013 Здравствуйте! C OpenCv работаю недавно. Проблема такая: нужно получить значения крайнего ряда пикселей по X и Y. Пробовал использовать метод cvmGet и записывать результаты в массив типа double. Но компилятор пишет ошибку: expression must have a constant value. Размерность массива задается переменной c и r, которые я получаю таким образом: int c= img->width int r= img->height; В чем ошибка? И если я неправильно получаю значения пикселей, подскажите пожалуйста как это правильно сделать. Заранее спасибо за помощь! Вот полностью код: #include "stdafx.h" #include <opencv\highgui.h> #include <opencv\cxcore.h> #include <opencv2\core\core.hpp> #include <opencv2\core\core_c.h> #include <opencv2\imgproc\imgproc_c.h> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\calib3d\calib3d.hpp> int _tmain(int argc, _TCHAR* argv[]) { IplImage *img= cvLoadImage("C:\\Users\\Rino256\\Desktop\\face\\test.jpg"); int c= img->width; int r= img->height; cvNamedWindow("ex", CV_WINDOW_AUTOSIZE); double arr_x[c]; double arr_y[r]; cv::Mat mtx(img); CvMat mat= mtx; for(int i=0; i<img->width; i++){ arr_x[i]=cvmGet(&mat, 0, i ); } for(int i=0; i<img->height; i++) { arr_y[i]= cvmGet(&mat, i, 0); } cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("ex"); return 0; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано December 2, 2013 используйте новый интерфейс cv::Mat, а не IplImage. http://stackoverflow.com/questions/17919399/accessing-pixel-value-of-gray-scale-image-in-opencv ну если надо старое то тут раздел Accessing image elements http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vkl 0 Жалоба Опубликовано December 5, 2013 Размер Массива (r, c) должен быть целочисленной константой, значением const либо константным выражением, в котором все значения известны на момент компиляции. Размер Массива не может быть переменной, значение которой устанавливается во время выполнения программы. Использовав операцию new можно обойти это ограничение. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах