Нет элемента с именем ‘Blender’ в пространстве имен ‘cv ::detail’ ошибка сшивания.hpp при использовании простого детектора больших двоичных объектов

#c #ios #objective-c #opencv #uiimage

#c #iOS #objective-c #opencv #uiimage

Вопрос:

Я пытаюсь использовать простой детектор блогов с 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
 

Ответ №1:

Простая ошибка новичка. В документации OpenCV четко указано, что все операторы OpenCV должны помещаться ПЕРЕД любым кодом Apple, чтобы предотвратить ошибку перечисления. Имеется в виду, чтобы убедиться, что операторы импорта opencv помещены перед оператором заголовка Obj C import.