Skip to content

Commit 60a510c

Browse files
committed
Merge pull request #1475 from alalek:stereo_fix_crash
2 parents 0327b79 + 30b97f2 commit 60a510c

File tree

3 files changed

+17
-21
lines changed

3 files changed

+17
-21
lines changed

modules/stereo/include/opencv2/stereo/matching.hpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,12 @@ namespace cv
366366
};
367367
protected:
368368
//arrays used in the region removal
369-
Mat speckleY;
370-
Mat speckleX;
371-
Mat puss;
369+
Mat_<int> speckleY;
370+
Mat_<int> speckleX;
371+
Mat_<int> puss;
372372
//int *specklePointX;
373373
//int *specklePointY;
374374
//long long *pus;
375-
int previous_size;
376375
//!method for setting the maximum disparity
377376
void setMaxDisparity(int val)
378377
{
@@ -480,10 +479,10 @@ namespace cv
480479
CV_Assert(currentMap.cols == out.cols);
481480
CV_Assert(currentMap.rows == out.rows);
482481
CV_Assert(t >= 0);
483-
int *pus = (int *)puss.data;
482+
CV_Assert(!puss.empty());
484483
int *specklePointX = (int *)speckleX.data;
485484
int *specklePointY = (int *)speckleY.data;
486-
memset(pus, 0, previous_size * sizeof(pus[0]));
485+
puss.setTo(Scalar::all(0));
487486
T *map = (T *)currentMap.data;
488487
T *outputMap = (T *)out.data;
489488
int height = currentMap.rows;
@@ -511,7 +510,7 @@ namespace cv
511510
speckle_size = dr;
512511
specklePointX[dr] = i;
513512
specklePointY[dr] = j;
514-
pus[i * width + j] = 1;
513+
puss(i, j) = 1;
515514
dr++;
516515
map[iw + j] = k;
517516
while (st < dr)
@@ -522,7 +521,7 @@ namespace cv
522521
for (int d = 0; d < 8; d++)
523522
{//if insisde
524523
if (ii + di[d] >= 0 && ii + di[d] < height && jj + dj[d] >= 0 && jj + dj[d] < width &&
525-
pus[(ii + di[d]) * width + jj + dj[d]] == 0)
524+
puss(ii + di[d], jj + dj[d]) == 0)
526525
{
527526
T val = map[(ii + di[d]) * width + jj + dj[d]];
528527
if (val == 0)
@@ -531,7 +530,7 @@ namespace cv
531530
specklePointX[dr] = (ii + di[d]);
532531
specklePointY[dr] = (jj + dj[d]);
533532
dr++;
534-
pus[(ii + di[d]) * width + jj + dj[d]] = 1;
533+
puss(ii + di[d], jj + dj[d]) = 1;
535534
}//this means that my point is a good point to be used in computing the final filling value
536535
else if (val >= 1 && val < 250)
537536
{

modules/stereo/src/stereo_binary_bm.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,6 @@ namespace cv
275275
StereoBinaryBMImpl(int _numDisparities, int _kernelSize) : Matching(_numDisparities)
276276
{
277277
params = StereoBinaryBMParams(_numDisparities, _kernelSize);
278-
previous_size = 0;
279278
}
280279

281280
void compute(InputArray leftarr, InputArray rightarr, OutputArray disparr)
@@ -322,12 +321,11 @@ namespace cv
322321

323322
int width = left0.cols;
324323
int height = left0.rows;
325-
if(previous_size != width * height)
324+
if (puss.total() != (size_t)width * height)
326325
{
327-
previous_size = width * height;
328-
speckleX.create(height,width,CV_32SC4);
329-
speckleY.create(height,width,CV_32SC4);
330-
puss.create(height,width,CV_32SC4);
326+
speckleX.create(height, width);
327+
speckleY.create(height, width);
328+
puss.create(height, width);
331329

332330
censusImage[0].create(left0.rows,left0.cols,CV_32SC4);
333331
censusImage[1].create(left0.rows,left0.cols,CV_32SC4);

modules/stereo/src/stereo_binary_sgbm.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ namespace cv
248248
CostType* hsumAdd = hsumBuf + (std::min(k, height-1) % hsumBufNRows)*costBufSize;
249249
if( k < height )
250250
{
251-
for(int ii = 0; ii <= ww; ii++)
251+
for(int ii = 0; ii < ww; ii++)
252252
{
253253
for(int dd = 0; dd <= params.numDisparities; dd++)
254254
{
@@ -692,12 +692,11 @@ namespace cv
692692
{
693693
int width = left.cols;
694694
int height = left.rows;
695-
if(previous_size != width * height)
695+
if (puss.total() != (size_t)width * height)
696696
{
697-
previous_size = width * height;
698-
speckleX.create(height,width,CV_32SC4);
699-
speckleY.create(height,width,CV_32SC4);
700-
puss.create(height,width,CV_32SC4);
697+
speckleX.create(height, width);
698+
speckleY.create(height, width);
699+
puss.create(height, width);
701700
}
702701
Mat aux;
703702
aux.create(height,width,CV_16S);

0 commit comments

Comments
 (0)