OpenCV偶数矩形

时间:2015-10-11 00:33:14

标签: c++ opencv

我正在尝试将图像拆分为偶数矩形,其中每个矩形中的行数取决于计算机中的处理器数量。

我的图像是720x601所以在4核上我的图像被分成4个矩形,尺寸为180x601。现在我试图在每个部分上面和下面增加4行。

运行我的代码我得到了一个本地启动和本地停止 localstart 0 localstop 179 localstart 180 localstop 359 localstart 360 localstop 539 localstart 540 localstop 719

当我在我的开始上方和下方采取额外的行时,停止变为 开始0停止183 开始176停止363 开始356停止543 开始536停止720

使用这些值我使用Rect函数

cv::Mat tmp = image(cv::Rect(x, start, image.cols, stop));

这应该给我4部分,上面的尺寸在开始和停止方面,但我得到我的第一部分的尺寸为0x183,秒部分获得尺寸: 183x601 363x601

localstart和localstop是根据用于创建负载平衡的方法计算的,以便将工作发送到每个处理器。

void parallelRange(int globalstart, int globalstop, int irank, int nproc, int& localstart, int& localstop, int& localcount)
{
    int nrows = globalstop - globalstart + 1;
    int divisor = nrows/nproc;
    int remainder = nrows%nproc;
    int offset;
    if (irank < remainder) offset = irank;
    else offset = remainder;

    localstart = irank*divisor + globalstart + offset;
    localstop = localstart + divisor - 1;
    if (remainder > irank) localstop += 1;
    localcount = localstop - localstart + 1;
}

然后它崩溃了一个断言说我没有数组边界。

我的代码是:

int start = std::max(0, localstart[irank] - blurLevel);
int stop = std::min(localstop[irank] + blurLevel, image.rows);

cv::Mat tmp = image(cv::Rect(x, start, image.cols, stop));
cout << tmp.rows << "x" << tmp.cols << endl;
img = matToBytes( tmp );

我希望有人能告诉我为什么在使用开始/停止时我的图像部分会变得奇怪。我在其他地方使用类似的代码来获得4个偶数段。

0 个答案:

没有答案