这是我第二次遇到这个问题。以前,它已发布here并已修复。上一次,尝试Ubuntu Precise。我将我的系统更新到新的Ubuntu LTS 14.04并再次出现问题,旧修复似乎无法正常工作
template <class NumType> void drawCircles(cv::Mat& image, const cv::Mat_<cv::Vec<NumType, 2> > points, cv::Scalar color)
{
Point2d p0;
for (int i = 0; i < points.cols; i++)
{
p0.x = cvRound(points.at<cv::Vec<NumType, 2> >(0, i)[0]);
p0.y = cvRound(points.at<cv::Vec<NumType, 2> >(0, i)[1]);
circle(image, p0, 5, color, 2, 8);
}
}
我尝试在here讨论的提示中添加模板关键字。具体做法是:
p0.x = cvRound(points.at<cv::template Vec<NumType, 2> >(0, i)[0]);
仍然没有帮助 原始错误是:
error: expected primary-expression before ‘>’ token
顺便说一句,这个相同的代码在Windows中使用VS2008或VS2010进行了彻底编译
谢谢!
答案 0 :(得分:0)
我必须创建一个简单的例子来测试它。这没有任何用处,但它证明它编译好。你99%的路在那里。
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
template <class NumType>
void drawCircles( cv::Mat& image,
const cv::Mat_<cv::Vec<NumType, 2> > points,
cv::Scalar color)
{
// Added cv namespace
cv::Point2d p0;
for (int i = 0; i < points.cols; i++)
{
// added template call to at rather than Vec
p0.x = cvRound(points.template at<cv::Vec<NumType, 2> >(0, i)[0]);
p0.y = cvRound(points.template at<cv::Vec<NumType, 2> >(0, i)[1]);
circle(image, p0, 5, color, 2, 8);
}
}
int main(){
cv::Mat image;
cv::Mat_<cv::Vec2d> points;
cv::Scalar color;
drawCircles( image, points, color );
return 0;
}