2013-01-21 15 views
5

Próbuję przyciąć obrazy wychodzące ze strumienia wideo z OpenCV dla iOS. Nie próbuję robić nic nadzwyczajnego, po prostu przycinam obraz i go wyświetlam. Próbowałem this i this, ani nie wydaje się działać dla mnie. Jako metoda delegata otrzymuję aktualny obraz cv :: Mat, więc potrzebuję tylko kodu, który utworzy efekt przycinania.Crop Mat image w OpenCV 2.4.3 (iOS)

W razie potrzeby mogę zrobić coś tak skomplikowanego, jak this, ale potrzebuję tylko prostokątnego rzutu, więc myślę, że jest łatwiejszy sposób. Po prostu nie rozumiem, dlaczego ustawienie zwrotu z inwestycji nie działa dla mnie!

cv::Rect myROI(10, 10, 100, 100); 
cv::Mat croppedImage = src(myROI); 

src.copyTo(croppedImage); 


[displayView setImage:[UIImage imageWithCVMat:src]]; 

^^^ nie działa, tylko wyświetlanie obrazu oryginalnego

+0

Witam mam ten sam problem. Czy mógłbyś rzucić okiem na mój post http://stackoverflow.com/questions/14756505/croping-an-image-in-ios-uisng-opencv-face-detect – 2vision2

Odpowiedz

21

problemu w kodzie jest to, że poprzez skopiowanie obrazu src skopiować cały obraz do przyciętego obrazu. Dostępne są dwie możliwości:

1 - Bez kopiowania danych. Jest taki sam jak ty. Ale bez drugiego kroku. W takim przypadku croppedImage nie jest prawdziwa kopia to wskazał danych przydzielonych w src .:

cv::Mat croppedImage = src(myRoi); 

2 - Przy kopiowaniu danych.

cv::Mat croppedImage; 
cv::Mat(src, myRoi).copyTo(croppedImage) 
+1

Próbowałem twojej pierwszej sugestii przedtem i kiedy ja pokazał go, był bardzo spieprzony (wyglądał jak statyczny telewizor). Druga metoda, o której wspomniałeś, zadziałała dla mnie, dzięki! – Jameo

+2

@Jameo Twoja metoda wyświetlania prawdopodobnie zakładała, że ​​dane były ciągłe, co nie jest prawdą przy użyciu pierwszej metody. – Hammer

+0

Druga sugestia zadziałała dla mnie, podczas gdy pierwsza nie powiodła się. – jarora