Adding support for compressed input data and right color image. (#1463)

This commit is contained in:
matlabbe
2025-03-08 16:40:04 -08:00
committed by GitHub
parent d88353dc1b
commit a1b602dbe0
26 changed files with 359 additions and 123 deletions

View File

@@ -82,7 +82,8 @@ cv::Mat StereoBM::computeDisparity(
{
UASSERT(!leftImage.empty() && !rightImage.empty());
UASSERT(leftImage.cols == rightImage.cols && leftImage.rows == rightImage.rows);
UASSERT((leftImage.type() == CV_8UC1 || leftImage.type() == CV_8UC3) && rightImage.type() == CV_8UC1);
UASSERT(leftImage.type() == CV_8UC1 || leftImage.type() == CV_8UC3);
UASSERT(rightImage.type() == CV_8UC1 || rightImage.type() == CV_8UC3);
cv::Mat leftMono;
if(leftImage.channels() == 3)
@@ -94,6 +95,16 @@ cv::Mat StereoBM::computeDisparity(
leftMono = leftImage;
}
cv::Mat rightMono;
if(rightImage.channels() == 3)
{
cv::cvtColor(rightImage, rightMono, CV_BGR2GRAY);
}
else
{
rightMono = rightImage;
}
cv::Mat disparity;
#if CV_MAJOR_VERSION < 3
cv::StereoBM stereo(cv::StereoBM::BASIC_PRESET);
@@ -106,7 +117,7 @@ cv::Mat StereoBM::computeDisparity(
stereo.state->textureThreshold = textureThreshold_;
stereo.state->speckleWindowSize = speckleWindowSize_;
stereo.state->speckleRange = speckleRange_;
stereo(leftMono, rightImage, disparity, CV_16SC1);
stereo(leftMono, rightMono, disparity, CV_16SC1);
#else
cv::Ptr<cv::StereoBM> stereo = cv::StereoBM::create();
stereo->setBlockSize(blockSize_);
@@ -119,7 +130,7 @@ cv::Mat StereoBM::computeDisparity(
stereo->setSpeckleWindowSize(speckleWindowSize_);
stereo->setSpeckleRange(speckleRange_);
stereo->setDisp12MaxDiff(disp12MaxDiff_);
stereo->compute(leftMono, rightImage, disparity);
stereo->compute(leftMono, rightMono, disparity);
#endif
if(minDisparity_>0)

View File

@@ -71,7 +71,8 @@ cv::Mat StereoSGBM::computeDisparity(
{
UASSERT(!leftImage.empty() && !rightImage.empty());
UASSERT(leftImage.cols == rightImage.cols && leftImage.rows == rightImage.rows);
UASSERT((leftImage.type() == CV_8UC1 || leftImage.type() == CV_8UC3) && rightImage.type() == CV_8UC1);
UASSERT(leftImage.type() == CV_8UC1 || leftImage.type() == CV_8UC3);
UASSERT(rightImage.type() == CV_8UC1 || rightImage.type() == CV_8UC3);
cv::Mat leftMono;
if(leftImage.channels() == 3)
@@ -83,6 +84,16 @@ cv::Mat StereoSGBM::computeDisparity(
leftMono = leftImage;
}
cv::Mat rightMono;
if(rightImage.channels() == 3)
{
cv::cvtColor(rightImage, rightMono, CV_BGR2GRAY);
}
else
{
rightMono = rightImage;
}
cv::Mat disparity;
#if CV_MAJOR_VERSION < 3
cv::StereoSGBM stereo(
@@ -97,7 +108,7 @@ cv::Mat StereoSGBM::computeDisparity(
speckleWindowSize_,
speckleRange_,
mode_==1);
stereo(leftMono, rightImage, disparity);
stereo(leftMono, rightMono, disparity);
#else
cv::Ptr<cv::StereoSGBM> stereo = cv::StereoSGBM::create(
minDisparity_,
@@ -111,7 +122,7 @@ cv::Mat StereoSGBM::computeDisparity(
speckleWindowSize_,
speckleRange_,
mode_);
stereo->compute(leftMono, rightImage, disparity);
stereo->compute(leftMono, rightMono, disparity);
#endif
if(minDisparity_>0)