我正在尝试在深度图像上放置一个简单的边界框:
void cropAndResize(const cv::Mat &input, cv::Mat &output) {
std::vector<std::vector<cv::Point> > contours;
cv::Rect croppedHand;
cv::findContours(input, contours,CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
int maxCont = -1;
if (contours.size() != 0) {
maxCont = 0;
}
for (int i = 0; i < contours.size(); i++) {
int currSize = contours.at(i).size();
if (contours.at(maxCont).size() < currSize)
maxCont = i;
}
if (maxCont > -1) {
croppedHand = cv::boundingRect(contours.at(maxCont));
}
}
boundingRect在cv :: boundingRect中给出了断言失败(points.checkVector(2)&gt; = 0&amp;&amp;(points.depth()== CV_23F || points.depth()== CV_32S)) ...)。
这很奇怪,因为我很确定这段代码以前有用过。所以我检查了contours
的内容,结果令人困惑。一些元素是尺寸= 452126096252493236甚至更大的矢量。检查向量,我主要有点像{x = ???,y = ???}。
findCountours有什么问题吗?我正在使用Visual Studio 2013,Windows 8 Pro,OpenCV 2.4.8。
编辑:输入图像为CV_8UC1。
答案 0 :(得分:0)
所以对于其他有此问题的人,我通过回到VS2010解决了这个问题。似乎OpenCV无法跟上当前的技术。