opencv:如何填充椭圆形状与中心的距离

时间:2015-05-23 18:59:28

标签: c++ opencv image-processing

我想在OpenCV中填充椭圆形状,使其所需的值是距其中心的归一化距离。

通常在OpenCV中,我可以用如下的椭圆形填充图像:

cv::ellipse(image, e, cv::Scalar(255), CV_FILLED);

然而,这给椭圆一个恒定的标量值1,我想根据它与中心的距离来改变这个值。

我想一种方法是通过这些点并手动计算它。我对OpenCV很陌生,并且在使用这个Mat对象时遇到了麻烦。

1 个答案:

答案 0 :(得分:1)

以下是查找椭圆的距离变换的示例代码段。

你可以简单地创建一个Ellipse区域的掩码。找到该掩码的距离变换。

Mat mEllipse_Bgr(Size(640,480),CV_8UC3,Scalar(0));
Mat mEllipseMask(mEllipse_Bgr.size(),CV_8UC1,Scalar(0));

// Draw a ellipse 
ellipse( mEllipse_Bgr, Point( 200, 200 ), Size( 100.0, 160.0 ), 45, 0, 360, Scalar( 255, 0, 0 ), 1, 8 );
ellipse( mEllipseMask, Point( 200, 200 ), Size( 100.0, 160.0 ), 45, 0, 360, Scalar( 255), -1, 8 );
imshow("Ellipse Image",mEllipse_Bgr);
imshow("Ellipse Mask",mEllipseMask);

// Perform the distance transform algorithm
Mat mDist;
distanceTransform(mEllipseMask, mDist, CV_DIST_L2, 3);

// Normalize the distance Transform image for range = {0.0, 1.0} to view it
normalize(mDist, mDist, 0, 1., NORM_MINMAX);
imshow("Distance Transform Image", mDist);