我只是编写一个函数来获取最接近点的对象的轮廓。我认为这并不难,但是我不知道为什么不能在此函数中使用sqrt
。结果我很奇怪,而不是想象中的那个。
void FindContour(Mat a,Mat &image){
Mat temp;
int x=0, y=0;
int i;
int largest=65535;
a.copyTo(temp);
vector< vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(temp,contours,hierarchy,CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE );
for (int index = 0; index >= 0; index = hierarchy[index][0]) {
Moments moment = moments(contours[index]);
double area = moment.m00;
int a = moment.m10/area;
int b = moment.m01/area;
i=std::sqrt((a-50)^2+(b-60)^2);
if (i<largest)
{ x=a;
y=b;
largest=i;
cout<<"x"<<x<<"y"<<y<<"i"<<i<<"/n";
}
}
Point2i pt(x,y);
circle(image,pt,20,Scalar(0,255,0),2);
putText(image,"object",Point(x,y+30),1,1,Scalar(0,255,0),2);
}
最佳答案
i=std::sqrt((a-50)^2+(b-60)^2);
^^^^^^^^^^^^^^^^^
因为
a
,b
被定义为int
,所以结果(a-50)^2+(b-60)^2
也将是int
。这将使程序难以选择要使用的 std::sqrt
。为了解决这个问题,您可以在调用此函数之前先将其转换为
float
。像这样:i=std::sqrt((float) ((a-50)^2+(b-60)^2));
关于c++ - OpenCV获取最接近点的轮廓,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22121772/