gpt4 book ai didi

ios - OpenCV:图像处理,Objective C/C++

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:14 25 4
gpt4 key购买 nike

我的目标是使用 iPhone 相机找到高尔夫球,所以我在 Photoshop 中执行了相同的步骤并我想在图像/实时视频帧上在 openCV 中实现相同的步骤从原始图片开始。

  • 然后提高饱和度以使颜色进入明亮区域
  • 利用曲线截断光谱的边缘
  • 然后将图像转换为灰度
  • 再次使用曲线得到黑/白
  • 最后 - 只是为了外观 - 涂上颜色

--输入图片:

enter image description here

--输出图片:

enter image description here

能否请您帮助我或给我一些有关在 iOS 中使用 OpenCV 进行图像处理的提示?

提前致谢!

编辑我使用了下面的代码并得到了下面的输出图像,

  - (UIImage*) applyToneCurveToImage:(UIImage*)image
{
CIImage* ciImage = [[CIImage alloc] initWithImage:image];
CIFilter* filter =
[CIFilter filterWithName:@"CIToneCurve"
keysAndValues:
kCIInputImageKey, ciImage,
@"inputPoint0",[CIVector vectorWithX:0.00 Y:0.3]
,@"inputPoint1",[CIVector vectorWithX:0.25 Y:0.4]
,@"inputPoint2",[CIVector vectorWithX:0.50 Y:0.5]
,@"inputPoint3",[CIVector vectorWithX:0.75 Y:0.6]
,@"inputPoint4",[CIVector vectorWithX:1.00 Y:0.7]
,nil];

//CIFilter* filter2 = [filter copy];

//step1
filter = [CIFilter filterWithName:@"CIColorControls"
keysAndValues:kCIInputImageKey,
[filter valueForKey:kCIOutputImageKey], nil];


[filter setValue:[NSNumber numberWithFloat:0]
forKey:@"inputBrightness"];
[filter setValue:[NSNumber numberWithFloat:6]
forKey:@"inputContrast"];

CIImage* result = [filter valueForKey:kCIOutputImageKey];
CIContext *context = [CIContext contextWithOptions:nil];

CGImageRef cgImage = [context createCGImage:result
fromRect:[result extent]];

UIImage* filteredImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

ciImage=nil;
context=nil;
cgImage=nil;
result=nil;

return filteredImage;
}

- (void)didCaptureIplImage:(IplImage *)iplImage
{
@autoreleasepool
{
IplImage *orgimage = cvCreateImage(cvGetSize(iplImage), IPL_DEPTH_8U, 3);

orgimage=[self CreateIplImageFromUIImage:[self applyToneCurveToImage:[UIImage imageNamed:@"GolfImage.jpeg"] ] ];

Mat matRGB = Mat(orgimage);

//ipl imaeg is also converted to HSV; hue is used to find certain color
IplImage *imgHSV = cvCreateImage(cvGetSize(orgimage), 8, 3); //2

cvCvtColor(orgimage, imgHSV, CV_BGR2HSV);

IplImage *imgThreshed = cvCreateImage(cvGetSize(orgimage), 8, 1); //3

// cvInRangeS(imgHSV, cvScalar(_Hmin, _Smin, _Vmin), cvScalar(_Hmax , _Smax, _Vmax), imgThreshed);

cvInRangeS(imgHSV, cvScalar(0.00, 0.00, 34.82), cvScalar(180.00 , 202.54, 256.00), imgThreshed);

Originalimage=nil;

cvReleaseImage(&iplImage);
cvReleaseImage(&orgimage);
cvReleaseImage(&imgHSV);

[self didFinishProcessingImage:imgThreshed];
}

输出图像:

enter image description here

最佳答案

您不需要 openCV 来完成这些。你应该能够使用 Core Image 得到这个结果

看这个问题How to change minimum or maximum value by CIFilter in Core image?

我在这里给出了关于色调曲线操作的相当详细的答案。

这将涵盖您的第 2 步和第 4 步。对于第 1 步(饱和度)尝试 CIColorControls。对于第 3 步(转换为灰度),您还可以使用 CIColorControls,但这会涉及将饱和度降至 0,而不是您想要的。相反,您可以使用 CIMaximumComponentCIMinimumComponent。对于第 5 步,您可以使用 1-4 的结果作为具有平坦颜色的 mask 。

OpenCV 将允许您从图像的其余部分中挑选出球(我想这就是您想要实现的目标,您没有在问题中提及它)。你可以引用这个问题: How does the HoughCircle function works? I can't get it to work properly我用一个附带的演示项目回答了这个问题:https://github.com/foundry/OpenCVCircles .您可以通过将 UIImage 转换为 openCV Mat 格式,将 Core Image 处理的结果传递到 openCV(该链接项目向您展示了如何执行此操作)。

关于ios - OpenCV:图像处理,Objective C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20945842/

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