2016-03-07 10 views
11

के रूप में संकलित किया जाना चाहिए IOS प्रोजेक्ट पर OpenCV को स्थापित करने के तरीके पर instructions का पालन किया है। हालांकि एक्सकोड 7 का उपयोग करते समय मुझे मैन्युअल रूप से एक उपसर्ग शीर्षलेख जोड़ना पड़ा। दुर्भाग्यवश ऐसा करने से मदद नहीं मिली और मुझे अभी भी संकलन त्रुटियां मिल रही थीं। मैं फिर एक और पोस्ट पढ़ता हूं जो सुझाव देता है कि मैन्युअल रूप से आयात को जोड़ना सर्वोत्तम है और एक्सकोड 7 में उपसर्ग हेडर का उपयोग नहीं करना है, इसलिए मैंने किया।एक्सकोड 7 और ओपनसीवी (कोई स्विफ्ट): Core.hpp हेडर को C++

यहाँ मेरी कोड है:

#import "ViewController.h" 

#import <opencv2/opencv.hpp> 
#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 
#import <opencv2/highgui/cap_ios.h> 
//using namespace cv; 

@interface ViewController() 
{ 
    IBOutlet UIImageView* imageView; 
    IBOutlet UIButton* button; 
} 

- (IBAction)actionStart:(id)sender; 

@end 

हालांकि मैं अभी भी निम्न त्रुटियों मिलता है।

enter image description here enter image description here

जब मैं का उपयोग कर नाम स्थान सीवी uncomment; मैं निम्नलिखित मिल:

enter image description here

मैंने पाया कुछ जटिल समाधान स्विफ्ट आदि के लिए हेडर उजागर बारे में बात कर .. मैं सिर्फ अपनी परियोजना Xcode 7 के साथ ऑब्जेक्टिव-सी पर काम करना चाहता ...

+0

कोड को सी ++ सुविधाओं की आवश्यकता होती है; आपको उद्देश्य सी ++ का उपयोग करना है, उद्देश्य सी नहीं। सबसे तेज़ 'वर्कअराउंड' आपकी '.m' फ़ाइल को '.mm' में बदलना है; लेकिन यह इस तथ्य को लात मार रहा है कि अब आप उस बिंदु पर सड़क के नीचे 'सी ++' लिख रहे हैं। – Petesh

+0

मैंने कोशिश की लेकिन यह अभी भी काम नहीं करेगा .. – mm24

+0

क्या आपको यह काम करने के लिए मिला[email protected] mm24 – Tam

उत्तर

18

OpenCV C++ फ्रेमवर्क है, जिसका अर्थ है कि ओपनसीवी का उपयोग करने वाले किसी भी कोड को C व्याख्या के बजाय C++ व्याख्या के साथ संकलित किया जाना है।

त्रुटियां जो आप देखते हैं, उदा। using namespace cv; के साथ संकेत मिलता है कि कोड उद्देश्य-सी ++ कंपाइलर के बजाय उद्देश्य-सी कंपाइलर का उपयोग करके संकलित किया गया है।

जैसा कि मैंने अपनी टिप्पणी में उल्लेख किया है, ऐसा करने का सबसे आसान तरीका यह सुनिश्चित करना है कि #include कोई ओपनसीवी हेडर नामित होना चाहिए उदा। ViewController.mm, यानी यह एक उद्देश्य-सी ++ फ़ाइल होना चाहिए।

वैकल्पिक रूप से, आप उपयोगिता फलक में फ़ाइल प्रकार के लिए Objective-C++ Source विकल्प का चयन करके फ़ाइल के Type का चयन और ओवरराइड कर सकते हैं। utilities pane drop-down selection

+0

स्पष्ट स्पष्टीकरण के लिए धन्यवाद। मैं कल यह कोशिश करूंगा और आपको बताऊंगा कि मैं कैसे मिला .. चीयर्स, और उत्तर देने के लिए बहुत बहुत धन्यवाद :) – mm24

+0

@ mm24 क्या आपने कभी इस समस्या को हल किया है? मुझे एक ही समस्या का सामना करना पड़ रहा है और कोई भी समाधान काम नहीं कर रहा है। :/ –

+0

मुझे इस पर काम करना बंद करना पड़ा और वैकल्पिक समाधान ढूंढना पड़ा। मैंने कोशिश की लेकिन यह पुष्टि करने के लिए पर्याप्त नहीं है कि यह काम करता है या नहीं। मैं स्वीकार करता हूं क्योंकि इसमें 4 अप-वोट हैं और समझदार लगता है। – mm24

5

मुझे बस एक ही समस्या थी। मैं ओपनसीवी के साथ एक स्विफ्ट परियोजना में काम कर रहा हूं।

स्विफ्ट के संबंध में, ओपनसीवी के लिए इसकी प्रविष्टि बिंदु एक फ़ाइल है जिसे मैंने OpenCVWrapper कहा है। तो मुझे OpenCVWrapper.h और OpenCVWrapper.mm मिला। मेरे प्रोजेक्ट के ब्रिजिंग हेडर में, मुझे #import "OpenCVWrapper.h" मिला।

बात यह है कि मैं उद्देश्य-सी ++ में MatUtils नामक एक कक्षा लिखना चाहता था जिसे मैं OpenCVWrapper.mm से कॉल कर सकता था। उनके लिए वहां देखने योग्य होने के लिए, मुझे उन्हें MatUtils.h में रखना पड़ा।

लंबी कहानी छोटी, गलती यह है कि OpenCVWrapper.h में, मैंने # आयात "MatUtils.h" किया था। गलती !!!! ओपनसीवीवापर ब्रिजिंग हेडर में है, सी ++ अब स्विफ्ट से पहुंच योग्य है!

त्वरित सुधार: # OpenportVvWrapper.mm में "MatUtils.h" आयात करें!

चीयर्स! बीआरओ

+0

बस एक ही मुद्दे में भाग गया। कुछ मिनटों के बाद मुझे एहसास हुआ कि मैं .mm में इंटरफ़ेस को फिर से खोल सकता हूं और मुख्य wrapper.h की बजाय इंस्टेंस गुणों को उस जगह रख सकता हूं जो अन्यथा मुझे एक रिकर्सन में डाल देता है :-) –

+0

हाँ! मुझे लगता है कि आप इस https://medium.com/compileswift/ios-opencv-and-swift-1ee3e3a5735b का पालन कर रहे थे जो इसके बारे में वास्तविक स्पष्ट नहीं था, धन्यवाद। – rob5408

+1

हैलो, वास्तव में मैं उस लेख का अनुसरण कर रहा था, क्योंकि मैं वह हूं जिसने इसे हाहा लिखा था। मुझे उस लेख को अपडेट करना है, कुछ चीजें पुरानी हैं :) – bRo

संबंधित मुद्दे