2014-12-31 18 views
11

Tôi có hai hình ảnh âm thanh nổi mà tôi muốn sử dụng để tính toán bản đồ độ sâu. Trong khi tôi tiếc là không biết C/C++, tôi biết python-- vì vậy khi tôi tìm thấy this tutorial, tôi đã lạc quan.Python/OpenCV: Lập bản đồ độ sâu từ hình ảnh stereo

Thật không may, hướng dẫn có vẻ hơi lỗi thời. Nó không chỉ cần được tinh chỉnh để chạy ở tất cả (đổi tên 'createStereoBM' thành 'StereoBM') nhưng khi nó chạy, nó không cho kết quả tốt, ngay cả trên ví dụ hình ảnh stereo được sử dụng trong hướng dẫn .

Dưới đây là một ví dụ:

image-left image-right

import numpy as np 
import cv2 
from matplotlib import pyplot as plt 

imgL = cv2.imread('Yeuna9x.png',0) 
imgR = cv2.imread('SuXT483.png',0) 

stereo = cv2.StereoBM(1, 16, 15) 
disparity = stereo.compute(imgL, imgR) 

plt.imshow(disparity,'gray') 
plt.show() 

Kết quả:

the result

này trông rất khác với những gì tác giả của hướng dẫn đạt:

good result http://docs.opencv.org/trunk/_images/disparity_map.jpg

Tinh chỉnh thông số không cải thiện vấn đề. Tất cả tài liệu tôi đã có thể tìm thấy là cho phiên bản C ban đầu của mã openCV, không phải là tương đương với python-library. Rất tiếc là tôi không thể sử dụng điều này để cải thiện mọi thứ.

Mọi trợ giúp sẽ được đánh giá cao!

+0

chỉ để ghi lại, hướng dẫn là từ tương lai (opencv3.0), nhưng có, đã lỗi thời. cho phiên bản 3.0 hiện tại, bạn phải sử dụng cv2.StereoBM_create() hoặc cv2.StereoSGBM_create(). – berak

+0

cv2.StereoBM dường như tồn tại, nhưng sử dụng cv2.StereoBM_create() hoặc cv2.StereoSGBM_create() đưa ra một lỗi (lỗi thuộc tính). – jwdink

+0

một lần nữa, bạn rõ ràng đang sử dụng opencv2.4, không phải là 3.0 – berak

Trả lời

-1

Máy ảnh được dịch theo chiều dọc thay vì theo chiều ngang. Xoay hình ảnh 90 độ, sau đó thử. (Chứng minh điều đó cho chính mình bằng cách xoay màn hình. Tôi vừa nhặt máy tính xách tay của mình lên và bật nó lên.)

Bạn đề cập đến phần mềm khác; có lẽ là một loại hàng lớn/cột-chính của điều giữa bản gốc và pyOpenCV.

+0

Nếu tôi hiểu chính xác đề xuất của bạn, tôi nên thử xoay hình ảnh nguồn 90 độ rồi chạy cùng một mã? Tôi vừa thử điều này-- nó không tạo ra kết quả tốt hơn. Bạn có làm việc này không? Nếu có, bạn có thể đăng kết quả không? – jwdink

+0

Tôi nghĩ đây chỉ là định dạng của câu hỏi ... Hình ảnh từ hai góc nhìn được phân tách theo chiều ngang. – will

+0

Ngoài ra, nếu trường hợp này xảy ra, thì nó sẽ không thành vấn đề, bạn chỉ cần đặt hình ảnh * phía dưới * ở bên trái (xoay khung tham chiếu). Xoay từng hình ảnh riêng lẻ sẽ thực sự ngừng hoạt động. – will

1

Có thể bạn cần tiếp tục điều chỉnh các thông số của thuật toán khớp khối.

có một cái nhìn vào bài viết trên blog này: tác giả https://erget.wordpress.com/2014/03/13/building-an-interactive-gui-with-opencv/

Các bài viết đã sáng tác một tập các lớp học để làm cho quá trình hiệu chỉnh máy ảnh sắp xếp hợp lý hơn so với hướng dẫn opencv. Những lớp học có sẵn như gói pypi: https://github.com/erget/StereoVision

Hope this helps :)

15

Bạn có những hình ảnh một cách sai lầm xung quanh.

Nhìn vào những hình ảnh, thiếc phía sau đèn cho phép bạn làm việc ra các địa điểm máy ảnh của hai hình ảnh,

Chỉ cần thay đổi này:

# v 
imgR = cv2.imread('Yeuna9x.png',0) 
imgL = cv2.imread('SuXT483.png',0) 
#^

Nếu bạn nhìn vào hình ảnh trong hướng dẫn mà họ nói là khung left, nó giống như khung right của bạn.

Đây là kết quả của tôi sau khi thay đổi.

enter image description here

Các vấn đề liên quan