2014-04-04 81 views
3

我想將我的投資回報率調整爲一個比例因子。 我想這一點:如何調整投資回報率?

std::cout << roi.x << ", " << roi.y << std::endl; 
std::cout << roi.x + roi.width << ", " << roi.y + roi.height << std::endl; 

std::cout << img.size().width << ", " << img.size().height << std::endl << std::endl; 

scale = 0.1; // 10% 

cv::Rect new_size(
     roi.x*(1-scale), 
     roi.y*(1-scale), 
     (roi.x + roi.width)*(1+scale), 
     (roi.y + roi.height)*(1+scale)); 
cv::Mat tmp = img(new_size); 

它打印:

828, 142 
892, 206 
2048, 1150 

281, 173 
356, 248 
2048, 1150 

1025, 168 
1100, 243 
2048, 1150 

和:

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /tmp/opencv-TqF1/opencv-2.4.7.1/modules/core/src/matrix.cpp, line 323 
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /tmp/opencv-TqF1/opencv-2.4.7.1/modules/core/src/matrix.cpp:323: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat 

嗯,我想我正在嘗試設置重疊我的形象邊界的ROI 。我的問題是:我必須手動執行此操作嗎?如果是,如何進行縮放直至觸及邊界? OpenCV應該爲此提供一種方法,對嗎?我一直在尋找,我可以找到adjustROI,但我不知道如何使用它。

+0

是什麼類型的投資回報率? – Engine

+0

這是一個cv :: Rect –

+0

它應該是2d或2f點! – Engine

回答

2

您可以手動檢查/約束ROI邊界或使用Rect重疊,就像這樣:

cv::Rect new_size(/*Construct rect here*/); 
cv::Rect imgBounds(0,0,img.cols,img.rows); 
new_size = new_size & imageBounds; 
// Now you can do the following without worrying (except in the case that new_size is empty!!) 
cv::Mat tmp = img(new_size); 
相關問題