我正在尝试将Matrix拆分成段,对段进行一些操作,然后再将段合并为一个完整的矩阵。
分裂,我正在做:
for(int j = 0; j < segments; ++j)
{
Rect r;
if(j == lastSegment)
{
r = Rect(j * segmentWidth, 0, lastWidth, origHei);
}
else
{
r = Rect(j * segmentWidth, 0, segmentWidth - 1, origHei);
}
tmpFrame(r).copyTo(segmentMats[j]);
}
然后合并它们我尝试:
Mat fullFrame;
for(int i = 0; i < maxSegments; ++i)
{
int segNum = i % segments;
Rect r;
if( segNum == 0) // 1st segment of frame
{
fullFrame.create(origWid, origHei, segmentMats[i].type());
r = Rect(0, 0, segmentWidth - 1, origHei);
}
else if (segNum == lastSegment)
{
r = Rect((i * segmentWidth), 0, lastWidth, origHei);
}
else
{
r = Rect((i * segmentWidth), 0, segmentWidth - 1, origHei);
}
segmentMats[i].copyTo(fullFrame(r));
}
但我一直在断言失败,
OpenCV错误:断言失败(0&lt; = roi.x&amp;&amp; 0&lt; = roi.width&amp;&amp; roi.x + roi.width&lt; = m.cols&amp;&amp; 0&lt; = roi.y&amp;&amp; 0&lt; = roi.height&amp;&amp; Mat中的roi.y + roi.height&lt; = m.rows)
我没有看到此代码如何在断言值之外设置边框。有人能看到我的错误吗?
感谢。
修改
感谢您的回复。为了澄清我的变量,我已经列出了它们的计算方法。
origWid和origHei是整个框架的高度和宽度
segments =帧被分成的垂直段数。所以segment = 2意味着帧被垂直分成两半。
lastSegment = segments - 1;因为它们是0-inclusive索引的,所以最后一个段具有该索引
segmentWidth = origWid / segments;如果origWid不能被段整除,则此楼层
lastWidth = origWid - (lastSegment * segmentWidth);这样可以解决origWid不能被段整除的问题,并捕获最后一段剩余的列数
segmentMats是细分 Mats
的数组segNum =细分的顺序。因此,如果segment == 2,则segNum == 0是帧的左半部分,segNum == 1是帧的右半部分