将几个ROI发送到另一个方法/函数来计算直方图?

时间:2014-02-11 14:47:45

标签: c++ opencv image-processing histogram

我正在检测图像中包含方形的所有区域。我得到的检测区域包含四个坐标(例如A,B,C,D)的正方形,如下所示:

image

在检测到正方形存在的区域后,我需要创建该区域的直方图。目前,我首先要为每个区域创建单独的图像,然后将每个图像发送到getHistogram(Mat detectedSquare);以获得直方图。

问题:我的应用程序的计算时间非常长,所以,我想找到一些方法,我可以跳过为每个区域创建这个单独的单独方块。

我想做什么:直接为每个区域创建直方图,而不为其创建图像。

Currenlty我为每个区域创建单独的图像,如下所示,我想摆脱它:

Mat detectedSquare;
detectedSquare.create(rows, cols, CV_8UC3);
Rect regionOfInterest = Rect (min_x,min_y, rows, cols);
detectedSquare= original_Image(regionOfInterest);

getHistogram(Mat detectedSquare);

1 个答案:

答案 0 :(得分:2)

假设Rect roi是您想要计算其直方图的图像Mat mat的子区域,您可以直接调用如下:

getHistgram(Mat(mat(Range(roi.y, roi.y+roi.height)
                 , Range(roi.x, roi.x+roi.width))));

编辑:正如您在下面评论的那样,您希望使用多线程加快速度。也许最简单的方法是使用OpenMP

vector<Rect> squares(N); // N square regions

#pragma omp parallel for
for (int i=0; i<N; i++)
{
    // ... compute histogram for squares[i] ...
}