Я пытаюсь получить стерео-совместимость, работающую с изображениями искусственной глубины. Совпадение, кажется, не выйдет хороших (без закупорки), но перевернутый (черный = близко, белый = далеко)OpenCV стерео-совместимый инвертированный выход
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 и 1.png
Я что-то не так? Спасибо
Попробуйте использовать [bitwise_not()] (http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#bitwise-not) функция, она переворачивает все байтов на вашем изображении (от белого до черного, от черного до белого и т. д.). У меня никогда не было опыта с стереоизображениями, не уверен, что это возможно, но прочитайте об этом, это может вам помочь. Я использую эту функцию для инвертирования изображений Mat. –
Значения ** depth ** не инвертируются. Черные значения имеют ** низкое ** расстояние и ** низкое значение ** пикселя, а в то время как пиксели имеют ** высокую ** глубину и ** высокие значения ** пикселя! Может быть, вы просто перепутали условия? – anderas
Ну, да, глубина вычисляется правильно, но она отображается неверно. 8-битные карты несоответствия обычно используют 255 для указания белого, который является пикселем ближе к камере, и 0 как черный пиксель, наиболее удаленный от камеры. http://students.cec.wustl.edu/~jwaldron/559/project2/depthMaps/torus.jpg – user1031204