У меня есть следующий код C++, который обращается к пикселям в IplImage. Здесь он имеет свойство, называемое imageData в IplImage. Я хочу преобразовать следующий код в OpenCV Android.Доступ к пикселам камеры камеры в OpenCV Android
IplImage *imageIn = cvLoadImage(strFileImage, CV_LOAD_IMAGE_UNCHANGED);
IplImage *imageShirtHSV = cvCreateImage(cvGetSize(imageShirt), 8, 3);
cvCvtColor(imageShirt, imageShirtHSV, CV_BGR2HSV);
int h = imageShirtHSV->height;
int w = imageShirtHSV->width;
int rowSize = imageShirtHSV->widthStep;
char *imOfs = imageShirtHSV->imageData;
for (int y=0; y<h; y++) {
for (int x=0; x<w; x++) {
// Get the HSV pixel components
uchar H = *(uchar*)(imOfs + y*rowSize + x*3 + 0); // Hue
uchar S = *(uchar*)(imOfs + y*rowSize + x*3 + 1); // Saturation
uchar V = *(uchar*)(imOfs + y*rowSize + x*3 + 2); // Value (Brightness)
}
}
Вот как я превратил вышеуказанный код на C++ в OpenCV Android. Я использовал double[] pixels = imageShirtHSV.get(y, x);
как эквивалент char *imOfs = imageShirtHSV->imageData;
в C++. Но следующий код дает исключение ArrayIndexOutOfBoundsException, когда я получаю доступ к значениям HSV в массиве double [] пикселей.
imageIn = inputFrame.rgba();
Imgproc.cvtColor(imageIn, imageShirtHSV, Imgproc.COLOR_BGR2HSV);
int h = imageShirtHSV.height();
int w = imageShirtHSV.width();
int rowSize = (int)imageShirtHSV.step1();
for (int y=0; y<h; y++) {
for (int x=0; x<w; x++) {
double[] pixels = imageShirtHSV.get(y, x);
int hVal = (int)pixels[(y*rowSize) + (x) + 0]; // Hue
int sVal = (int)pixels[(y*rowSize) + (x) + 1]; // Saturation
int vVal = (int)pixels[(y*rowSize) + (x) + 2]; // Value (Brightness)
}
}
Может кто-нибудь, пожалуйста, указать мне, как я могу преобразовать C++ char *imOfs = imageShirtHSV->imageData;
строку в код OpenCV Android. Большое спасибо.
Большое спасибо. –