OpenCV 立体匹配反转输出
OpenCV stereo matching inverted output
我正在尝试使用人工深度图像进行立体匹配。
匹配似乎很好(没有遮挡)但倒置(黑色=接近,白色=远)
int main()
{
Mat img1, img2, g1, g2;
Mat disp, disp8;
img1 = imread("W:/GoogleDrive/UDK/Croped_left/4.png");
img2 = imread("W:/GoogleDrive/UDK/Croped_left/1.png");
cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);
StereoBM sbm;
sbm.state->SADWindowSize = 9;
sbm.state->numberOfDisparities = 16;
sbm.state->preFilterSize = 5;
sbm.state->preFilterCap = 61;
sbm.state->minDisparity = -39;
sbm.state->textureThreshold = 507;
sbm.state->uniquenessRatio = 0;
sbm.state->speckleWindowSize = 0;
sbm.state->speckleRange = 8;
sbm.state->disp12MaxDiff = 1;
sbm(g1, g2, disp);
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);
imshow("left", img1);
imshow("right", img2);
imshow("disp", disp8);
waitKey(0);
return(0);
}
我得到的输出是这样的:
我是不是做错了什么?
谢谢
我想你混淆了左右。 4.png 应该是 right/img2 和 1.png left/img1。 (物体在右边的图片是从左边的相机看到的,反之亦然。)
好吧,我根据 Dainius Šaltenis 的建议做了一个工作,方法是在 opencv 中使用按位非运算符反转图像并删除所有纯白色像素。
//Bitwise_not to invert the images
bitwise_not(disp8, disp8);
//Loop through the images find all white pixels and replace with black
for (int i = 0; i < disp8.rows; i++)
for (int j = 0; j < disp8.cols; j++)
if (disp8.at<uchar>(i, j) > 254)
disp8.at<uchar>(i, j) = 0;
我正在尝试使用人工深度图像进行立体匹配。 匹配似乎很好(没有遮挡)但倒置(黑色=接近,白色=远)
int main()
{
Mat img1, img2, g1, g2;
Mat disp, disp8;
img1 = imread("W:/GoogleDrive/UDK/Croped_left/4.png");
img2 = imread("W:/GoogleDrive/UDK/Croped_left/1.png");
cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);
StereoBM sbm;
sbm.state->SADWindowSize = 9;
sbm.state->numberOfDisparities = 16;
sbm.state->preFilterSize = 5;
sbm.state->preFilterCap = 61;
sbm.state->minDisparity = -39;
sbm.state->textureThreshold = 507;
sbm.state->uniquenessRatio = 0;
sbm.state->speckleWindowSize = 0;
sbm.state->speckleRange = 8;
sbm.state->disp12MaxDiff = 1;
sbm(g1, g2, disp);
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);
imshow("left", img1);
imshow("right", img2);
imshow("disp", disp8);
waitKey(0);
return(0);
}
我得到的输出是这样的:
我是不是做错了什么? 谢谢
我想你混淆了左右。 4.png 应该是 right/img2 和 1.png left/img1。 (物体在右边的图片是从左边的相机看到的,反之亦然。)
好吧,我根据 Dainius Šaltenis 的建议做了一个工作,方法是在 opencv 中使用按位非运算符反转图像并删除所有纯白色像素。
//Bitwise_not to invert the images
bitwise_not(disp8, disp8);
//Loop through the images find all white pixels and replace with black
for (int i = 0; i < disp8.rows; i++)
for (int j = 0; j < disp8.cols; j++)
if (disp8.at<uchar>(i, j) > 254)
disp8.at<uchar>(i, j) = 0;