2014-09-26 64 views
0

當我初始化StereoBM對象時,出現錯誤「無法定義抽象類的對象」。我檢查了calib3d.hpp,發現StereoBM是一個抽象類。請給我提供的解決方案如何定義所有這些功能StereoBM類StereoBm Opencv函數給出錯誤「無法定義抽象類的對象」

cv::Mat leftimg =cv::imread("leftimage.jpg"); 
cv::Mat rightimg = cv::imread("rightimage.jpg"); 
cv::Size imagesize = leftimg.size(); 

cv::Mat g1,g2,disp,disp8; 
cv::cvtColor(leftimg,g1,cv::COLOR_BGR2GRAY); 
cv::cvtColor(rightimg,g2,cv::COLOR_BGR2GRAY); 

cv::StereoBM *sbm;  
sbm->setDisp12MaxDiff(1); 
sbm->setSpeckleRange(8); 
sbm->setSpeckleWindowSize(0); 
sbm->setUniquenessRatio(0); 
sbm->setTextureThreshold(507); 
sbm->setMinDisparity(-39); 
sbm->setPreFilterCap(61); 
sbm->setPreFilterSize(5); 
sbm->compute(g1,g2,disp); 
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U); 

cv::imshow("left", leftimg); 
cv::imshow("right", rightimg); 
cv::imshow("disp", disp8); 
+0

OpenCV的版本? (也是像這樣的指針:'sbm.state-> preFilterSize = 5;'看起來可疑錯誤 – berak 2014-09-27 11:36:59

+0

opencv版本3.0和我已編輯包含正確的代碼,我最初寫錯碼。任何幫助將不勝感激。 – 2014-09-28 03:35:53

+1

Ptr sbm = createStereoBM(16,2); //否則在你使用它之前它會死掉。(你*需要*智能指針在這裏) – berak 2014-09-28 06:09:22

回答

1

在評論中建議固定的錯誤,所以我與建議更換之後發佈的工作代碼,以便它可以幫助別人的情況下,類似的問題。

cv::Mat leftimg =cv::imread("leftimage.jpg"); 
cv::Mat rightimg = cv::imread("rightimage.jpg"); 
cv::Size imagesize = leftimg.size(); 
cv::Mat g1,g2,disp,disp8; 
cv::cvtColor(leftimg,g1,cv::COLOR_BGR2GRAY); 
cv::cvtColor(rightimg,g2,cv::COLOR_BGR2GRAY); 

cv::StereoBM *sbm=cv::createStereoBM(16,2);  
sbm->setDisp12MaxDiff(1); 
sbm->setSpeckleRange(8); 
sbm->setSpeckleWindowSize(0); 
sbm->setUniquenessRatio(0); 
sbm->setTextureThreshold(507); 
sbm->setMinDisparity(-39); 
sbm->setPreFilterCap(61); 
sbm->setPreFilterSize(5); 
sbm->compute(g1,g2,disp); 
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U); 

cv::imshow("left", leftimg); 
cv::imshow("right", rightimg); 
cv::imshow("disp", disp8); 
2

如果您使用3.1版本,您將收到以下錯誤:

use of undeclared identifier 'createStereoBM' 

3.1你可以嘗試:

StereoBM *sbm = StereoBM::create(16, 2); 
相關問題