2014-02-11 86 views
0

我正在检测包含正方形图像的所有区域。我得到含有检测到的区域的正方形在其四个坐标的术语(例如A,B,C,d),如下所示:发送几个ROI到另一个方法/函数来计算直方图?

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); 
+0

从一个区域创建图像需要多长时间?那里的工作量最多的就是一堆memcpy调用。 –

+0

此外,也许[这篇文章](http://stackoverflow.com/questions/7041181/equivalent-to-cvsetimageroi-in-the-opencv-c-interface)可以帮助,设置图像的投资回报率。 –

+0

@ChrisO:目前,我正在做同样的事情,这是目前在你给的链接...但计算时间是非常高的我的应用程序....我的实际应用程序是发送这些广场SVM进行分类。 – skm

回答

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] ... 
} 
+0

它也类似于我正在使用的除了单行写代码。但是有什么办法可以减少计算时间。 – skm

+0

@ user2440724我想你不能如果你的意思是运行时间。无论如何,您必须循环所有像素来计算直方图。对? – herohuyongtao

+0

是否可以为“for循环”执行多线程,因为每个方块的结果是独立的。 – skm