C++ i OpenCV: przekazanie do funkcji wskaźnika na obiekt cv::Mat

0

Witam,
Na wstępie: używam OpenCV 2.1 i Microsoft Visual 2010 Express pod Win7 x64. W programie występuje mi przeładowanie pamięci, wydaje mi się ze powoduje je przekazywanie w argumencie obiektu cv::Mat ze zdjęciem. Funkcja wywołuje się rekurencyjnie kilka tysięcy razy i działa wiele jej wywołań jednocześnie, dlatego podejrzewam iż to jest przyczyną problemu.

Nagłówek funkcji wygląda tak:

void PrzyporzadkujPixel( const Mat& obraz, int pixel_x, int pixel_y)

I mam sobie jakiś tam obiekt Mat, do niego wczytany obrazek, więc wywołanie jest takie:

 PrzyporzadkujPixel(zdjecie,2,2);

I teraz moja nieudana próba skorzystania ze wskaźnika do tego zdjęcia:

void PrzyporzadkujPixel(  Mat* obraz, int pixel_x, int pixel_y)

i wskaźnik próbuje utworzyć tak:

Mat wskaznik = &zdjecie;

I niestety, przy tym poleceniu builder wywala:

initializing' : cannot convert from 'cv::Mat' to 'cv::Mat *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Będę ogromnie wdzięczny, jeśli ktoś naprowadzi mnie jak przekazać obiekt Mat jako wskaźnik do funkcji. Dodam, że w samej funkcji obiekt ten jest mi potrzebny do odczytywania wartości kolejnych pixeli.

Proszę o pomoc.

0

Mieszasz wskaźniki, zmienne i referencje. Wracaj do podstaw :-)

0

i wskaźnik próbuje utworzyć tak:

Mat wskaznik = &zdjecie;

Albo nie wiem zupelnie o co chodzi, albo tutaj nie definiujesz wskaznika.

Jak chcesz przeslac obiekt typu Mat do funkcji z parametrem Mat *, to obiekt ten wysylasz przez referencje. f(&obiekt); Nie rozumiem do konca o co Ci chodzi :)

0

chłopaki wyżej maja rację... a ponadto, jeśli chcesz uzyskać dostęp do wartości konkretnego piksela, to łatwiej to zrobić tak

tmp.at<Vec3b>(x,y)

zwracana wartość to Vec3b, 0 = blue, 1 = green, 2 = red
dostęp w ten sposób:

byte green_value = tmp.at<Vec3b>(x,y)[1]

1 użytkowników online, w tym zalogowanych: 0, gości: 1