gpt4 book ai didi

c++ - 在 Xcode 中为 OpenCV 组合两个 c++ 文件(使用未声明的标识符 CVSquares)

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:18 25 4
gpt4 key购买 nike

我正在尝试合并 OpenCVCirclesOpenCVSquares对于一个项目。如果我直接从 Xcode 项目文件(独立地)打开它们,它们工作正常,但如果我将 CVSquares.h 和 CVSquares.cpp 文件移动到 OpenCVCircles 项目,它开始提示:“使用未声明的标识符 CVSquares”。这发生在 CVWrapper.mm 中(请参阅末尾有问题的行):

#import "CVWrapper.h"
#import "CVCircles.h"
#import "CVSquares.h"
#import "UIImage+OpenCV.h"

//remove 'magic numbers' from original C++ source so we can manipulate them from obj-C
#define TOLERANCE 0.3
#define THRESHOLD 50
#define LEVELS 9
#define ACCURACY 0

@implementation CVWrapper

+ (NSMutableArray*) detectedCirclesInImage:(UIImage*) image
{
double dp = 1;
double minDist = 10;
double param1 = 100;
double param2 = 30;
int min_radius = 1;
int max_radius = 30;

return [[self class] detectedCirclesInImage:image
dp:dp
minDist:minDist
param1:param1
param2:param2
min_radius:min_radius
max_radius:max_radius];
}


+ (NSMutableArray*) detectedCirclesInImage:(UIImage*)image
dp:(CGFloat)dp
minDist:(CGFloat)minDist
param2:(CGFloat)param2

{
double param1 = 100;
int min_radius = 1;
int max_radius = 30;

return [[self class] detectedCirclesInImage:image
dp:dp
minDist:minDist
param1:param1
param2:param2
min_radius:min_radius
max_radius:max_radius];
}

+ (NSMutableArray*) detectedCirclesInImage:(UIImage*)image
dp:(CGFloat)dp
minDist:(CGFloat)minDist
param2:(CGFloat)param2
min_radius:(int)min_radius
max_radius:(int)max_radius
{
double param1 = 100;

return [[self class] detectedCirclesInImage:image
dp:dp
minDist:minDist
param1:param1
param2:param2
min_radius:min_radius
max_radius:max_radius];
}



+ (NSMutableArray*) detectedCirclesInImage:(UIImage*)image
dp:(CGFloat)dp
minDist:(CGFloat)minDist
param1:(CGFloat)param1
param2:(CGFloat)param2
min_radius:(int)min_radius
max_radius:(int)max_radius
{
NSMutableArray *array = [[NSMutableArray alloc] init];
UIImage* modifiedImage = nil;
cv::Mat matImage = [image CVMat];
int num_circles = 0;
matImage = CVCircles::detectedCirclesInImage
(matImage, dp, minDist, param1, param2, min_radius, max_radius, &num_circles);
modifiedImage = [UIImage imageWithCVMat:matImage];
NSLog(@"n circles: %i",num_circles);
[array addObject:modifiedImage];
[array addObject:[NSNumber numberWithInt:num_circles]];
NSLog(@"array: %@, %@",[array objectAtIndex:0],[array objectAtIndex:1]);
return array;
}



+ (UIImage*) detectedSquaresInImage:(UIImage*) image
{
//if we call this method with no parameters,
//we use the defaults from the original c++ project
return [[self class] detectedSquaresInImage:image
tolerance:TOLERANCE
threshold:THRESHOLD
levels:LEVELS
accuracy:ACCURACY];

}


+ (UIImage*) detectedSquaresInImage:(UIImage*) image
tolerance:(CGFloat) tolerance
threshold:(NSInteger)threshold
levels:(NSInteger)levels
accuracy:(NSInteger)accuracy

{
//NSLog (@"detectedSquaresInImage");
UIImage* result = nil;
cv::Mat matImage = [image CVMat];

//ERROR IS ON THIS LINE
matImage = CVSquares::detectedSquaresInImage (matImage, tolerance, threshold, levels, accuracy);


result = [UIImage imageWithCVMat:matImage];
//NSLog (@"detectedSquaresInImage result");

return result;

}


@end

我的印象是我在重复定义某些东西,在某些文件中缺少 .mm,等等,但我一整天都在为此苦苦挣扎,我无法让它工作(今天是我第一次与 C++)。任何帮助将不胜感激。

PS:感谢 foundry(无论他/她是谁)的 2 个很棒的即插即用项目!

最佳答案

最后将所有 CVSquares.cpp 代码粘贴到 CVCircles.cpp 代码中(以及将 CVSquares.h 粘贴到 CVCircles.h 中)并调用:

matImage = CVCircles::detectedSquaresInImage (matImage, tolerance, threshold, levels, accuracy);

否则无法让它工作。希望对您有所帮助!

关于c++ - 在 Xcode 中为 OpenCV 组合两个 c++ 文件(使用未声明的标识符 CVSquares),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com