मैं जानना चाहता हूं कि स्विफ्ट 4.2 . के साथ उच्च गतिशील रेंज इमेजिंग करने के लिए फ़ंक्शन कैसे करें

मैं OpenCVWrapper.h में कार्य करता हूं:

+(UIImage *) hdrImaging:(NSArray *)images :(NSArray *)times;

पहला सवाल यह है कि सरणी के बजाय वैक्टर को पैरा में कैसे सेट किया जाए?

मेरे पास मेरी OpenCVWrapper.mm फ़ाइल होने के बाद जहां मैं फ़ंक्शन करता हूं:

#import <opencv2/opencv.hpp>
#import "OpenCVWrapper.h"
#import <UIKit/UIKit.h>
#include <opencv2/photo.hpp>
#include <opencv2/highgui/ios.h>

@implementation OpenCVWrapper

+(UIImage *) hdrImaging:(/* HERE PUT VECTOR PARAMS */)images :(/* HERE PUT VECTOR PARAMS */)times{

    Mat response; 
    //here to declare Mat it's cv::Mat response;

    //I don't know how to declare and use Ptr function and what file import to use this function
    Ptr<CalibrateDebevec> calibrate = createCalibrateDebevec();
    calibrate->process(images, response, times);


    Mat hdr;
    Ptr<MergeDebevec> merge_debevec = createMergeDebevec();
    merge_debevec->process(images, hdr, times, response);
    Mat ldr;
    Ptr<TonemapDurand> tonemap = createTonemapDurand(2.2f);
    tonemap->process(hdr, ldr);
    Mat fusion;
    Ptr<MergeMertens> merge_mertens = createMergeMertens();
    merge_mertens->process(images, fusion);

    response = fusion * 255;

    return MatToUIImage(response);
}

@end

क्या कोई मेरी .mm फ़ाइल में इस फ़ंक्शन को बनाने में मेरी मदद कर सकता है, फ़ंक्शन में वेक्टर पैरा कैसे पास करें और इस कोड के लिए कौन सी फ़ाइल आयात करें?

धन्यवाद !

3
rem 4 पद 2018, 13:32

1 उत्तर

सबसे बढ़िया उत्तर

तुम्हारे प्रश्न का उत्तर देने के लिए:-

  • आप समोच्च के मामले में अपने फ़ंक्शन पैरामीटर के लिए "std::vector<std::vector<cv::Point> >" प्रकार का उपयोग कर सकते हैं या बिंदुओं के लिए "std::vector<cv::Point2f>" का उपयोग कर सकते हैं। अन्य प्रकार भी हैं लेकिन मैंने अपने प्रोजेक्ट पर और कुछ भी उपयोग नहीं किया

  • अपने हेडर में "#import<opencv2/imgcodecs/ios.h>" शामिल करना सुनिश्चित करें

  • 'Mat' के बजाय 'cv::Mat' का प्रयोग करें और अधिकांश अपरिचित प्रकारों और कार्यों से पहले 'cv::' उपसर्ग करने का प्रयास करें (यह ज्यादातर काम करता है 😂)

यहां बताया गया है कि आपका कार्य संभवतः कैसा होना चाहिए (परीक्षण किया गया है और इसमें कोई त्रुटि नहीं है): -

+(UIImage *) hdrImaging:(std::vector<std::vector<cv::Point> >)images :(std::vector<std::vector<cv::Point> >)times{

cv::Mat response;   

cv::Ptr<cv::CalibrateDebevec> calibrate = cv::createCalibrateDebevec();
calibrate->process(images, response, times);


cv::Mat hdr;
cv::Ptr<cv::MergeDebevec> merge_debevec = cv::createMergeDebevec();
merge_debevec->process(images, hdr, times, response);
cv::Mat ldr;
cv::Ptr<cv::TonemapDurand> tonemap = cv::createTonemapDurand(2.2f);
tonemap->process(hdr, ldr);
cv::Mat fusion;
cv::Ptr<cv::MergeMertens> merge_mertens = cv::createMergeMertens();
merge_mertens->process(images, fusion);

response = fusion * 255;

return MatToUIImage(response);

}

सुनिश्चित करें कि आप अपने पैरामीटर प्रकार को अपने उपयोग के मामले से मेल खाने वाले किसी चीज़ में बदलते हैं, क्योंकि मैं सिर्फ एक उदाहरण दे रहा हूं

उम्मीद है ये मदद करेगा!

1
Lokesh SN 5 पद 2018, 09:24