计算图片中的感兴趣区域

Counting Regions of Interest in a Picture

我需要计算下图中的条带数(如标签所示):

我有数百张照片需要分析,我很好奇是否有一种方法可以自动隔离感兴趣的区域并对每张照片进行简单计数。我在图像分析方面经验不足,非常感谢任何帮助我入门的建议。

请运行下面的代码我已经为你工作了。它大约足够接近并调整它。祝你好运..!

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include "tchar.h"
using namespace cv;
using namespace std;

#define INPUT_FILE              "u.jpg"
#define OUTPUT_FOLDER_PATH      string("")

int _tmain(int argc, _TCHAR* argv[])
{
    Mat large = imread(INPUT_FILE);
    Mat rgb;
    // downsample and use it for processing
    pyrDown(large, rgb);
    Mat small;
    cvtColor(rgb, small, CV_BGR2GRAY);
    // morphological gradient
    Mat grad;
    Mat morphKernel = getStructuringElement(MORPH_ELLIPSE, Size(2, 2));
    Mat morphKernel1 = getStructuringElement(MORPH_ELLIPSE, Size(1, 1));
    morphologyEx(small, grad, MORPH_GRADIENT, morphKernel);
    // binarize
    Mat bw;
    threshold(grad, bw, 5.0, 50.0, THRESH_BINARY | THRESH_OTSU);
    // connect horizontally oriented regions
    Mat connected;
    morphKernel = getStructuringElement(MORPH_RECT, Size(5, 1));
    morphologyEx(bw, connected, MORPH_CLOSE, morphKernel);
    morphologyEx(bw, connected, MORPH_OPEN, morphKernel1);
    // find contours
    Mat mask = Mat::zeros(bw.size(), CV_8UC1);
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    findContours(connected, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
    // filter contours
    int y=0;
    for(int idx = 0; idx >= 0; idx = hierarchy[idx][0])
    {
        Rect rect = boundingRect(contours[idx]);
        Mat maskROI(mask, rect);
        maskROI = Scalar(0, 0, 0);
        // fill the contour
        drawContours(mask, contours, idx, Scalar(255, 255, 255), CV_FILLED);

        double a=contourArea( contours[idx],false);

            if(a> 75)

        {
            rectangle(rgb, rect, Scalar(0, 255, 0), 2);
            y++;
        }
        imshow("Result1",rgb);
    }
    cout<<" The number of elements"<<y<< endl; 
    imshow("Result",mask);
    imwrite(OUTPUT_FOLDER_PATH + string("rgb.jpg"), rgb);
    waitKey(0);
    return 0;
}