我正在检测图像中包含方形的所有区域。我得到的检测区域包含四个坐标(例如A,B,C,D)的正方形,如下所示:
在检测到正方形存在的区域后,我需要创建该区域的直方图。目前,我首先要为每个区域创建单独的图像,然后将每个图像发送到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);
答案 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] ...
}