相关疑难解决方法(0)

使用OpenCV和机器学习进行简单的对象检测

我必须使用OpenCV编码一个物体探测器(在这种情况下,一个球).问题是,google上的每一次搜索都会返回一些带有FACE DETECTION的内容.所以我需要帮助从哪里开始,使用什么等.

一些信息:

  • 球没有固定的颜色,它可能是白色的,但它可能会改变.
  • 我必须使用机器学习,不必是一个复杂和可靠的,建议是KNN(这是更简单和更容易).
  • 在我所有的搜索之后,我发现计算样本球直方图像的直方图并将其教导到ML可能是有用的,但我主要关注的是球的大小可以并且将会改变(越来越远离相机)和我不知道要把什么传递到ML给我分类,我的意思是......我不能(或者我可以?)只测试每个可能尺寸的图像的每个像素(从5x5到WxH) )并希望找到积极的结果.
  • 可能存在不均匀的背景,如人,球后面的布等.
  • 正如我所说,我必须使用ML算法,这意味着没有Haar或Viola算法.
  • 此外,我想使用轮廓在Canny'ed图像上找到圆圈,只需要找到一种方法将轮廓转换为一行数据来教授KNN.

    所以...建议?

    提前致谢.;)

c c++ opencv image-processing object-detection

25
推荐指数
1
解决办法
6万
查看次数

通过迭代自适应阈值处理和形状分析来检测圆形对象的簇

我一直在开发一个应用程序来计算圆形物体,如图片中的细菌菌落.

容易的是这些物体通常与背景明显不同.

但是,很少有困难使分析变得棘手:

  1. 背景将呈现渐变和快速的强度变化.
  2. 在容器的边缘,对象将是椭圆形而不是圆形.
  3. 物体的边缘有时相当模糊.
  4. 对象将聚集.
  5. 物体可以很小(直径6px)
  6. 最终,算法将由不熟悉图像分析的人使用(通过GUI),因此参数必须直观且极少.

这个问题已在科学文献中多次解决并"解决",例如,使用圆形Hough变换或分水岭方法,但我从未对结果感到满意.

这是描述的一个简单的方法是通过获得自适应阈值和分裂前景(如我在描述这个交使用距离变换)的群集对象.

我已经成功地实现了这种方法,但它并不总能处理强度的突然变化.此外,同行们也要求我提出更"新颖"的方法.

因此,我正在寻找一种新方法来提取前景.

因此,我研究了其他阈值/斑点检测方法.我尝试了MSER但发现它们不是很强大而且在我的情况下非常慢.

我最终提出了一种算法,到目前为止,它给了我很好的结果:

  1. 我将图像的三个通道分开并降低噪点(模糊/中值模糊).对于每个频道:
  2. 我通过计算原始通道和卷积(通过大内核模糊)之间的绝对差异来应用自适应阈值处理的第一步的手动实现.然后,对于阈值的所有相关值:
  3. 我对结果应用了一个阈值2)
  4. 找到轮廓
  5. 在授予其形状(尺寸,面积,凸度......)时验证或使轮廓无效
  6. 然后,仅在累加器(每个通道1个累加器)中重新绘制有效的连续区域(由轮廓分隔).
  7. 在累积超过阈值的连续区域之后,我最终得到"地区分数"的映射.强度最高的区域是最常满足形态学过滤标准的区域.
  8. 然后将三个映射(每个通道一个)转换为灰度和阈值(阈值由用户控制)

只是为了向您展示我必须使用的图像类型: 在此输入图像描述 该图片代表顶部3个样本图像的一部分,以及底部各个部分的算法结果(蓝色=前景).

这是我的C++实现:3-7

/*
 * cv::Mat dst[3] is the result of the absolute difference between original and convolved channel.
 * MCF(std::vector<cv::Point>, int, int) is a filter function that returns an positive int only if the input contour is valid.
 */

/* Allocate 3 matrices (1 per channel)*/
cv::Mat accu[3];

/* We define the …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm opencv image-processing openmp

16
推荐指数
1
解决办法
5091
查看次数

使用OpenCV进行椭圆检测

我想用OpenCV for Android检测省略号,使用OpenCV 2.4.1包中的Tutorial 2-Basic作为起点.请注意,我的椭圆将是一个完美的Photoshop.

根据我的理解,使用"HoughCircles"只会找到完美(或如此)的圆圈,从而留下椭圆.

任何帮助都会非常感激,因为我是OpenCV的初学者

这是我到目前为止所尝试的

    case Sample2NativeCamera.VIEW_MODE_CANNY: (ignore the Canny mode...)

        capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
        Imgproc.HoughCircles(mGray, mCircles, Imgproc.CV_HOUGH_GRADIENT, 1, 20);
        Log.d("Ellipse Points", " X " + mCircles.get(1,1)[0] + mCircles.get(1, 1)[1]);

        break;
Run Code Online (Sandbox Code Playgroud)

如果您认为任何更多信息可能有用,请告诉我.

java android opencv image-processing computer-vision

11
推荐指数
2
解决办法
2万
查看次数

OpenCV点目标检测未找到所有目标,并且发现圆圈是偏移的

我正试图检测黑/白点目标的中心,就像在这张照片中一样.我试过使用cv2.HoughCircles方法但是1,我只能检测2到3个目标,2,当我将找到的圆绘制回图像时,它们总是略微偏移.

我使用了错误的方法吗?我应该使用findContours还是完全不同的东西?

这是我的代码:

import cv2
from cv2 import cv
import os
import numpy as np

def showme(pic):
    cv2.imshow('window',pic)
    cv2.waitKey()
    cv2.destroyAllWindows()


im=cv2.imread('small_test.jpg')

gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

#I've tried blur,bw,tr...  all give me poor results.

blur = cv2.GaussianBlur(gray,(3,3),0)
n,bw = cv2.threshold(blur,120,255,cv2.THRESH_BINARY)
tr=cv2.adaptiveThreshold(blur,255,0,1,11,2)

circles = cv2.HoughCircles(gray, cv.CV_HOUGH_GRADIENT, 3, 100, None, 200, 100, 5, 16)

try:
    n = np.shape(circles)
    circles=np.reshape(circles,(n[1],n[2]))
    print circles
    for circle in circles:
        cv2.circle(im,(circle[0],circle[1]),circle[2],(0,0,255))
    showme(im)
except:
    print "no cicles found"
Run Code Online (Sandbox Code Playgroud)

这是我目前的输出:

c python opencv image-processing computer-vision

8
推荐指数
1
解决办法
7159
查看次数

python通过抵消轮廓/缩小多边形来分离圆形粒子

我是python的新手并且卡住了......

我想创建一个python脚本,允许我将图像上的相邻粒子分开,如下所示:

之前

进入这样的不同地区:

后

我被建议使用分水岭方法,据我所知它会给我这样的东西:

流域的3D

EDIT 实际上发现这是距离变换而不是分水岭

然后,我可以使用阈值来分隔它们.遵循这个openCV分水岭指南,但它只能切割出颗粒.无法"转换"代码以执行我想要的操作.

然后我采取了另一种方法.试图使用openCV轮廓,这给我提供了良好的粒子轮廓.然后我一直在寻找一种简单的方法来执行多边形偏移,以便像这样缩小边缘:

边缘偏移

使用偏移轮廓(多边形)的中心应该给出粒子的数量.但是我只能找到一种简单的方法来使用python进行边缘偏移/多边形收缩.

python opencv numpy matplotlib

8
推荐指数
1
解决办法
1723
查看次数

Android上的硬币识别

我目前正在开发一种能够拍摄现有硬币图像的Android应用程序,或使用内置相机扫描单个硬币(非常像Google Goggles).我正在使用OpenCV for Android.

我的问题如下:使用OpenCV在Android上执行硬币识别最合适的方法什么?

我到目前为止尝试的方法如下(也许我做错了,或者我只是完全走错了路线)

我目前正在使用OpenCV for Android(没有本机代码!),并且正在使用各种特征检测算法来识别图像中的关键点(即ORB,FAST,STAR).我相信这只是计算提取图像中的每个关键点与一组已知测试数据之间的欧几里德距离来识别最相似的图像(因此识别硬币),但事实证明,单独的方法是不合适的,因为照明,硬币旋转等效果对特征提取有太大的影响(加上硬币具有惊人相似的特征......)

一般来说,我正在寻找有关任何形式的预图像处理是否有用的建议?有哪些替代方法?或者有关如何改进现有方法的任何提示.

注意:我看过很多关于硬币检测的文件,但我特别关注硬币识别.

提前致谢!

android opencv image-processing image-recognition

5
推荐指数
1
解决办法
5468
查看次数

如何根据颜色和大小细分对象?

我有两个图像处理问题,我正在使用Open-CV处理.

  1. 识别彼此不同颜色的相似物体.
  2. 识别彼此不同大小的相似彩色物体.

方案1和2的示例图像;

1

不同颜色

2

大小不同

两个图像都有三种类型的感兴趣对象.(三种颜色或尺寸)

我遇到的技术包括阈值处理,然后使用像素计数的侵蚀,使用RGB值进行颜色分割.

什么是良好的工作链,什么是开始的好地方?

opencv image-processing computer-vision image-segmentation

3
推荐指数
1
解决办法
4029
查看次数