2012-05-07 22 views
12

जैसे यूआईएममेज को क्रॉप करना मैं अपनी एप्लिकेशन सुविधा में फंस गया हूं। मैं कैम स्कैनर फसल के समान फसल सुविधा चाहता हूं। सीएएम-स्कैनर की स्क्रीनें हैं: मैंने समान फसल व्यू बनाया है।कैमस्कैनर

enter image description here

enter image description here

मैं चार कोनों में से CGPoint प्राप्त किया है। लेकिन मैं फसल छवि को स्लैंट में कैसे प्राप्त कर सकता हूं।

यदि संभव हो तो कृपया मुझे कुछ सुझाव दें।

+0

हाय, क्या आप मुझे बता सकते हैं कि कैसे आप ऊपर बात को लागू किया है या यदि संभव हो तो आप किसी भी ट्यूटोरियल या उपयोगी लिंक साझा कृपया कर सकते हैं? –

+0

हाय देव, क्या आपको इस समस्या का समाधान मिल रहा है? कृपया, क्या आप इस सुविधा के लिए कोड जोड़ सकते हैं। मुझे इस तरह की जरूरत है। – Mani

उत्तर

3

मुझे 2 संभावनाएं दिखाई देती हैं। पहला एक रूपांतरण मैट्रिक्स की गणना करना है जो छवि को स्लंट करता है, और इसे आपके दृश्य की परत की CATransform3D प्रॉपर्टी में स्थापित करता है।

यह आसान होगा, मानते हुए कि आप जानते थे कि खींचने वाले रूपांतरण मैट्रिक्स को कैसे बनाया जाए। मैंने कभी नहीं सीखा है कि छवियों को फैला या स्कू करने वाले रूपांतरण मैट्रिक्स का निर्माण कैसे किया जाए, इसलिए मैं किसी भी मदद से नहीं हो सकता। मैं googling रूपांतरण मैट्रिक्स और खींच/skewing सुझाव देंगे।

दूसरी तरफ उस छवि का हिस्सा बदलना होगा जिसे आप ओपनजीएल बनावट में फसल कर रहे हैं और बनावट को अपने आउटपुट पर मैप करें। इसका वास्तविक बनावट का हिस्सा आसान होगा, लेकिन लगभग 1000 किलोग्राम ओपनजीएल सेटअप करने के लिए, और कुछ भी करने के लिए सीखने के लिए बहुत कुछ है। यदि आप उस मार्ग का पीछा करना चाहते हैं, तो मैं नए आईओएस 5 जीएलकिट का उपयोग करके सरल 2 डी बनावट उदाहरणों की खोज करने का सुझाव दूंगा।

4

यह एक परिप्रेक्ष्य परिवर्तन समस्या है। इस मामले में वे 2 डी विमान में 3 डी प्रक्षेपण की योजना बना रहे हैं।

जैसा कि, पहली छवि में चतुर्भुज आकार में चयन कोनों हैं और जब आप इसे आयताकार आकार में बदलते हैं, तो आपको या तो अधिक पिक्सेल जानकारी (interpolation) जोड़ने या कुछ पिक्सल हटाने की आवश्यकता होगी।

तो अब वास्तविक समस्या फसल छवि को अतिरिक्त पिक्सेल जानकारी जोड़ने और दूसरी छवि उत्पन्न करने के लिए प्रोजेक्ट करना है। इसे विभिन्न तरीकों से कार्यान्वित किया जा सकता है:

<> आप इंटरपोलेशन के साथ परिप्रेक्ष्य ट्रांज़ॉर्मेशन मैट्रिक्स को लागू करके इसे स्वयं लागू कर सकते हैं।

<> आप OpenGL का उपयोग कर सकते हैं।

<> आप OpenCV का उपयोग कर सकते हैं। .. और इसे लागू करने के कई और तरीके हैं।

मैंने ओपनसीवी का उपयोग करके इस समस्या को हल किया था। ओपनसीवी में निम्नलिखित कार्यों से आपको यह हासिल करने में मदद मिलेगी।

  1. cvPerspectiveTransform

  2. cvWarpPerspective

पहले समारोह स्रोत और गंतव्य प्रक्षेपण निर्देशांक का उपयोग कर परिवर्तन मैट्रिक्स की गणना करेगा। आपके मामले में src सरणी में सभी कोनों के लिए CGPoint से मान होंगे।और dest के आयताकार प्रक्षेपण बिंदु उदाहरण के लिए {(0,0) (200,0) (200,150) (0,150)} होगा।

एक बार जब आप रूपांतरण मैट्रिक्स प्राप्त कर लेते हैं तो आपको इसे दूसरे फ़ंक्शन पर पास करने की आवश्यकता होगी। आप इस thread पर जा सकते हैं।

ओपनसीवी लाइब्रेरी के कुछ अन्य विकल्प हो सकते हैं, लेकिन इसमें छवि प्रसंस्करण एल्गोरिदम का अच्छा संग्रह है।

ओपनसीवी लाइब्रेरी के साथ आईओएस एप्लिकेशन eosgarden पर उपलब्ध है।

+0

हे, आप इन वर्गों के CGPoint कैसे प्राप्त कर सकते हैं, ताकि हम फसल के लिए uiview बिंदु खींच सकें – Mukesh

0

लिंक में दिए गए कोड का उपयोग करना: हालांकि मैं havnt का उपयोग कर CGRect और CGContextClipToRect CGContextEOClip या CGContextClosePath

उपयोग करने का प्रयास की http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/

इसके बजाय इस कोशिश की ... लेकिन मैं कोशिश की है ड्राइंग touchesBegan पर CGContextClosePath का उपयोग कर रास्ता बंद और टच्समोड और टच्स एंड इवेंट्स।

आशा इससे आपकी समस्या के लिए और अधिक जानकारी दे सकते हैं ...