Я пытаюсь использовать Simple Blog Detector с Swift и оболочкой OpenCV Objective C ++ и OpenCV 3.1.0 для iOS. Однако я получаю несколько ошибок. Я не понимаю их, поскольку они подразумевают, что я использую stitching.hpp, но это не так. Какие-либо предложения? Я не могу понять, почему он вызывает блендеры stitching.hpp и компенсирует экспозицию.
Ошибки: Нет члена с именем «ExposureCompensator» в пространстве имен «cv :: detail» stitching.hpp и: Нет члена с именем «Blender» в пространстве имен «cv :: detail» stitching.hpp
Заголовки были добавлены в начало, так как я первоначально получал проблемы разбора от ожидаемого идентификатора «NO» в макросе. Добавив эти заголовки, я удалил проблемы разбора, как рекомендовано в исходных файлах, но это привело к новым ошибкам, как описано выше.
#ifndef OPENCV_STITCHING_BLENDERS_HPP
#define OPENCV_STITCHING_BLENDERS_HPP
#if defined(NO)
#warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
#endif
#ifndef OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP
#define OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP
#if defined(NO)
#warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
#endif
#import "OpenWrapper.h"#import <opencv2/opencv.hpp>
#import <opencv2/core/core.hpp>
#import <opencv2/imgcodecs/ios.h>
#import <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
@implementation OpenWrapper
+(UIImage *) makeGrayscale:(UIImage *)myImage{
// Convert UIImage to Mat
Mat imageMat;
UIImageToMat(myImage, imageMat);
// Convert from color to grayscale image
Mat graymat;
cvtColor(imageMat, graymat, CV_BGR2GRAY);
// Set up Simple Blob Parameters
SimpleBlobDetector::Params params;
params.minThreshold = 10;
params.maxThreshold = 200;
params.filterByArea = true;
params.minArea = 1500;
params.filterByCircularity = true;
params.minConvexity = 0.87;
params.filterByInertia = true;
params.minInertiaRatio = 0.01;// Creat dectector with keypoints
vector<KeyPoint> keypoints;
Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);
detector->detect(graymat, keypoints);
// Mat im_with_keypoints;
Mat im_with_keypoints;
drawKeypoints(graymat, keypoints, im_with_keypoints, Scalar(0,0,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
// Show blobs
imshow("keypoints", im_with_keypoints );
waitKey(0);
// Output results as UIIMage
return MatToUIImage(graymat);
}
#endif
#endif
@end
Простая ошибка новичка. В документации OpenCV четко указано, что все операторы OpenCV ДОЛЖНЫ помещаться в любой код Apple, чтобы предотвратить ошибку перечисления. Это означает, что вы должны поместить операторы импорта opencv перед оператором заголовка импорта Obj C ++.
Других решений пока нет …