簡體   English   中英

在ios上使用swift4.2的opencv功能

[英]Using opencv fonctions with swift4.2 on ios

我想知道如何使用swift 4.2進行高動態范圍成像的功能

我在OpenCVWrapper.h中創建函數:

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

第一個問題是如何在params中設置向量而不是數組?

在我有我的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

有人可以幫我在m'y .mm文件中創建這個函數,如何在函數中傳遞向量參數以及該代碼運行的文件是什么?

謝謝 !

回答你的問題: -

  • 在輪廓的情況下,您可以使用“ std::vector<std::vector<cv::Point> > ”類型作為函數參數,或者對點使用“ std::vector<cv::Point2f> ”。 還有其他類型,但我沒有在我的項目上使用更多

  • 確保在標題中包含“ #import<opencv2/imgcodecs/ios.h>

  • 使用' cv::Mat '而不是' 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);

}

確保將參數類型更改為與您的用例匹配的內容,因為我只是舉個例子

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM