如何改进对象检测?

时间:2015-12-08 18:13:54

标签: opencv object-detection opencv-contour

我想改进我的专为对象检测设计的项目。

首先,为了得到我的实际结果,我使用absdiff,然后我在下面的代码中使用以下操作:

cv::threshold(subtractionResultEdges, threshold, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

    Sobel(threshold, sobel, CV_32F, 1, 0);

    minMaxLoc(sobel, &minVal, &maxVal);

    sobel.convertTo(sobel, CV_8U, 255.0 / (maxVal - minVal), -minVal * 255.0 / (maxVal - minVal));

    dilate(subtractionResultEdges, subtractionResultEdges, verticalStructreMat, Point(-1, -1));


    erode(subtractionResultEdges, filteredResult, verticalStructreMat, Point(-1, -1));

    Canny(filteredResult, filteredResult, 33, 100, 3);

我的上一次操作是findContours(canny_output, *contours, *hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

这是我使用accumulate函数(20帧)后使用的每个函数和前景后的结果:

前景: http://j71i.imgup.net/foregroundc3dc.PNG

减法: http://p81i.imgup.net/subtractio2866.PNG

索贝尔: http://g51i.imgup.net/sobela1fb.PNG

阈值: http://p46i.imgup.net/treshold14c9.PNG

膨胀,腐蚀和Canny:

http://q68i.imgup.net/canny2e1a.PNG

findContours: http://v76i.imgup.net/contours6845.PNG

背景也来自accumulate函数。

你能帮助我更好地检测角落或轮廓吗?我需要它,以像素为单位获得对象大小。

提前致谢!

1 个答案:

答案 0 :(得分:1)

dilate/erode部分使用更大的内核,可能(11,11)甚至更大,或者多次迭代(这可以设置为参数。这应该更好地连接检测到的对象的各个部分然后你的轮廓会减少。

要计算面积,您可以使用contourArea()