我想知道如何使用OpenCV在我的摄像机上检测图像。该图像可以是500个图像中的一个。
我此刻正在做的事:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
self.videoCamera.delegate = self;
self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPresetHigh;
self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
self.videoCamera.defaultFPS = 30;
self.videoCamera.grayscaleMode = NO;
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self.videoCamera start];
}
#pragma mark - Protocol CvVideoCameraDelegate
#ifdef __cplusplus
- (void)processImage:(cv::Mat&)image;
{
// Do some OpenCV stuff with the image
cv::Mat image_copy;
cvtColor(image, image_copy, CV_BGRA2BGR);
// invert image
//bitwise_not(image_copy, image_copy);
//cvtColor(image_copy, image, CV_BGR2BGRA);
}
#endif
我想要检测的图像是2-5KB小的。很少有人在上面发短信,但其他的只是一些迹象。这里有一个例子:
你们知道我怎么做吗?
这里有几样东西。我会把你的问题分解并指出一些可能的解决办法。
>
分类:您的主要任务是确定某个图像是否属于某个类。这个问题本身可以分解为几个问题:
>
特征表示您需要决定如何为特征建模,即如何在特征空间中表示每个图像,以便训练分类器来分离这些类。特征表示本身已经是一个很大的设计决策。可以(i)使用n个bin计算图像的直方图并训练分类器,或者(ii)可以选择一系列随机贴片比较,例如在随机森林中。但是,在训练之后,您需要评估您的算法的性能,看看您的决策有多好。
有一个已知的问题叫做过拟合,这是当你学习太好,你不能概括你的分类器。这通常可以通过交叉验证来避免。如果你对假阳性或假阴性的概念还不熟悉,就来看看这篇文章吧。
一旦你定义了你的特征空间,你需要选择一个算法来训练数据,这可能是你最大的决定。每天都有几个算法出来。举几个经典的例子:朴素贝叶斯、支持向量机、随机森林,最近,社区利用深度学习取得了很大的成果。其中每一个都有自己的特定用法(例如SVM对于二进制分类非常有用),您需要熟悉这个问题。你可以从简单的假设开始,比如随机变量之间的独立性,训练一个朴素的贝叶斯分类器来尝试分离你的图像。
补丁:现在您提到您想要识别您的网络摄像头上的图像。如果您要打印图像并在视频中显示,您需要处理几件事情。有必要在您的大图像(从网络摄像机输入)上定义补丁,其中您为每个补丁构建一个特征表示,并按照您在上一步中所做的相同方式进行分类。为此,您可以滑动一个窗口,对所有的补丁进行分类,看看它们是属于负类还是属于正类。还有其他的选择。
比例尺:考虑到您能够检测图像在大图像中的位置并对其进行分类,下一步是放松fixes比例尺的玩具假设。要处理多尺度方法,您可以使用图像金字塔,这几乎允许您在多分辨率下执行检测。替代方法可以考虑关键点探测器,如SIFT和SURF。在SIFT内部,有一个图像金字塔,允许不变性。
投影到目前为止,我们假设你有正投影下的图像,但很可能你会有轻微的透视投影,这会使之前的全部假设失败。一个简单的解决方案是,例如,检测图像的白色背景的角点,并在构建用于分类的特征向量之前对图像进行校正。如果您使用了SIFT或SURF,那么您可以设计一种方法来避免显式地处理这种情况。然而,如果你的输入只是方块补丁,比如在ARToolkit中,我会手动修正。
我希望我能让你更清楚地了解你的问题。
我需要裁剪图像根据边缘我发现(与给定epsilon) 我有以下说明:Opencv c检测并裁剪图像上的白色区域 有了一个变化-我试图根据我从精明的边缘检测器收到的边缘图像找到矩形: 我遇到的问题是,当我到达第139列时,它会因为以下异常而崩溃: Microsoft C异常:cv::内存位置0x000000EB35DEF170处的异常。 但是,当我使用原始图像(而不是边缘图像)时,它会按预期工作。
本文向大家介绍使用OpenCV检测图像中的矩形,包括了使用OpenCV检测图像中的矩形的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现。 2.我这里使用的OpenCV版本是3.30. 矩形检测 1.得到原始图像之后,代码处理的步骤是: (1)滤波
我有一个盒子的图像。我试图检测角点并从圆圈中标记这些角点。我正在为此使用以下代码:
主要内容:第1步:加载OpenCV本机库,第2步:实例化CascadeClassifier类,步骤3:检测脸部包的类包含使用系统摄像头捕获视频的类和方法。 让我们来看看它是如何做到这一点。 第1步:加载OpenCV本机库 在使用OpenCV库编写Java代码时,需要做的第一步是使用加载OpenCV本地库。加载OpenCV本机库,如下所示。 第2步:实例化CascadeClassifier类 包的类用于加载分类器文件。 通过传递xml文件来实例化这个类,如下所示。 步骤3:检测脸部 可以使用类的方
主要内容:示例类的方法用于使用OpenCV编写图像。 要写图像,请重复前面示例中的前三个步骤。 要编写图像,需要调用类的方法。 以下是此方法的语法。 该方法接受以下参数 - filename - 一个变量,表示保存文件的路径。 mat - 表示要写入的图像的对象。 示例 以下程序是使用OpenCV库使用Java程序编写图像的示例。 在执行上述程序时,您将得到以下输出 - 如果您打开指定的路径,可以观察保存的图像
包的类提供读取和写入图像的方法。使用OpenCV,可以读取图像并将其存储在矩阵中(如果需要,可在矩阵上执行转换)。之后可以将处理后的矩阵写入文件。 类的方法用于使用OpenCV读取图像。 以下是此方法的语法。 它接受一个参数(文件名),一个字符串类型的变量,表示要读取的文件的路径。 下面给出了使用OpenCV库读取Java图像的步骤。 第1步:加载OpenCV本机库 使用方法加载OpenCV本机库