ios स्विफ्ट आईओएस में ओपनसीवी का उपयोग करना




swift opencv (2)

ओपनसीवी सी ++ में लिखा गया एक ढांचा है। ऐप्पल का reference हमें बताता है

आप सी ++ कोड सीधे स्विफ्ट में आयात नहीं कर सकते हैं। इसके बजाय, सी ++ कोड के लिए एक उद्देश्य-सी या सी रैपर बनाएं।

इसलिए आप सीधे एक त्वरित परियोजना में ओपनसीवी आयात और उपयोग नहीं कर सकते हैं, लेकिन यह वास्तव में बुरा नहीं है क्योंकि आप (आवश्यकता) ढांचे के सी ++ वाक्यविन्यास का उपयोग करना जारी रखते हैं जो पूरे नेट पर बहुत अच्छी तरह से प्रलेखित है।

तो आप कैसे आगे बढ़ते हैं?

  1. सी ++ ओपनसीवी को कॉल करने के लिए एक नया उद्देश्य-सी ++ वर्ग (.h, .mm ) बनाएं

OpenCVWrapper.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface OpenCVWrapper : NSObject

    + (UIImage *)processImageWithOpenCV:(UIImage*)inputImage;

@end

OpenCVWrapper.mm (फ़ाइल का उपयोग करें -> नया ... उद्देश्य-सी के लिए विज़ार्ड और .m फ़ाइल का नाम बदलें। मिमी)

#include "OpenCVWrapper.h"
#import "UIImage+OpenCV.h" // See below to create this

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

@implementation OpenCVWrapper : NSObject

    + (UIImage *)processImageWithOpenCV:(UIImage*)inputImage {
        Mat mat = [inputImage CVMat];

        // do your processing here
        ...

        return [UIImage imageWithCVMat:mat];
    }

@end

ओपनसीवी Wrapper.h / mm उदाहरण जैसे नए वर्ग बनाने के विकल्प के रूप में आप ओपनसीवी कार्यक्षमता के साथ मौजूदा उद्देश्य-सी कक्षाओं को विस्तारित करने के लिए उद्देश्य-सी श्रेणियों का उपयोग कर सकते हैं। उदाहरण के लिए UIImage + OpenCV श्रेणी:

UIImage + OpenCV.h

#import <UIKit/UIKit.h>
#import <opencv2/opencv.hpp>

@interface UIImage (OpenCV)

    //cv::Mat to UIImage
+ (UIImage *)imageWithCVMat:(const cv::Mat&)cvMat;
- (id)initWithCVMat:(const cv::Mat&)cvMat;

    //UIImage to cv::Mat
- (cv::Mat)CVMat;
- (cv::Mat)CVMat3;  // no alpha channel
- (cv::Mat)CVGrayscaleMat;

@end

UIImage + OpenCV.mm

https://github.com/foundry/OpenCVSwiftStitch/blob/master/SwiftStitch/UIImage%2BOpenCV.mm देखें

  1. हमारे नए बनाए गए रैपर ( #import "OpenCVWrapper.h" आयात करके स्विफ्ट में उपलब्ध सभी उद्देश्य-सी ++ कक्षाओं को बनाने के लिए Bridging-Header अपडेट करें।

  2. अपने स्विफ्ट फ़ाइलों में अपने रैपर का प्रयोग करें:

    छवि = UIImage (नाम: "image.jpeg") को संसाधित करने दें Image = OpenCVWrapper.processImageWithOpenCV (छवि)

ब्रिज हेडर में शामिल सभी उद्देश्य-सी ++ कक्षाएं सीधे स्विफ्ट से उपलब्ध हैं।

मेरे एक्सकोड प्रोजेक्ट में ओपनसीवी 2 फ्रेमवर्क जोड़ने के बाद, मैंने स्विफ्ट के साथ एकीकरण के लिए नमूने या ट्यूटोरियल खोजने की कोशिश की।

क्या इसके लिए कोई अच्छा ट्यूटोरियल है?


मेरे पास जिथूब पर डेमो है:

https://github.com/foundry/OpenCVSwiftStitch

यह दिखाता है कि एक स्विफ्ट-आधारित परियोजना से ओपनसीवी स्टिचर का उपयोग कैसे करें। ओपनसीवी पक्ष के लिए बहुत कुछ नहीं है, यह वास्तव में सिर्फ एक टुकड़ा है कि विभिन्न टुकड़ों को एक साथ कैसे रखा जाए।

जैसे स्विफ्ट सीधे सी ++ से बात नहीं करेगा, यह आईओएस पक्ष और ओपनसीवी पक्ष के बीच मध्यस्थता के लिए एक पतली उद्देश्य-सी ++ रैपर का उपयोग करता है।

इन सवालों के जवाब में बनाया गया:
क्या मैं सी ++ के साथ स्विफ्ट मिश्रण कर सकता हूं? उद्देश्य की तरह - सी। एमएम फ़ाइलें
आईओएस 6 में कैप्चर पैनोरमा के पुस्तकालयों





image-processing