2013-01-21 11 views
5

में फसल मैट छवि IOS के लिए ओपनसीवी के साथ वीडियो स्ट्रीम से बाहर आने वाली छवियों को फसल करने की कोशिश कर रहा हूं। मैं कुछ भी फैंसी करने की कोशिश नहीं कर रहा हूं, बस छवि को फसल करें, और इसे प्रदर्शित करें। मैंने this, और this को आजमाया है, न ही मेरे लिए काम करना प्रतीत होता है। एक प्रतिनिधि विधि के रूप में, मुझे वर्तमान सीवी :: मैट छवि पास हो जाती है, इसलिए मुझे केवल वह कोड है जो फसल प्रभाव पैदा करेगा।ओपनसीवी 2.4.3 (आईओएस)

यदि आवश्यक हो तो मैं this के रूप में जटिल कुछ कर सकता हूं, लेकिन मुझे केवल आयताकार फसल की आवश्यकता है, इसलिए मुझे लगता है कि एक आसान तरीका है। मैं समझ नहीं पा रहा हूं कि आरओआई क्यों स्थापित करना मेरे लिए काम नहीं कर रहा है!

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

src.copyTo(croppedImage); 


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

^^^ काम नहीं कर रहा है, सिर्फ मूल छवि प्रदर्शित

+0

हाय मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आप कृपया मेरी पोस्ट http://stackoverflow.com/questions/14756505/croping-an-image-in-ios-uisng-opencv-face-detect – 2vision2

उत्तर

21

समस्या अपने कोड में है कि स्रोत छवि को कॉपी करके आप फसली छवि के लिए पूरे चित्र को कॉपी है। दो संभावनाएं हैं:

1 - डेटा कॉपी किए बिना। जैसा आपने किया था वैसा ही है। लेकिन दूसरे चरण के बिना। डेटा की प्रतिलिपि के साथ - उस मामले में croppedImage कोई वास्तविक प्रतिलिपि यह डेटा स्रोत में आवंटित की ओर इशारा किया .:

cv::Mat croppedImage = src(myRoi); 

2 नहीं है।

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

पर एक नज़र डालें, मैंने पहले आपके पहले सुझाव की कोशिश की थी, और जब मैं इसे प्रदर्शित किया, यह बहुत खराब दिख रहा था (टीवी स्थिर की तरह दिखता है)। आपके द्वारा उल्लेख की जाने वाली दूसरी विधि ने मेरे लिए काम किया है, धन्यवाद! – Jameo

+2

@Jameo आपकी डिस्प्ले विधि शायद यह मान लीजिए कि डेटा निरंतर था जो पहली विधि का उपयोग करके सच नहीं है। – Hammer

+0

दूसरा सुझाव मेरे लिए काम करता था जबकि पहला असफल रहा। – jarora