了解OpenCV fitEllipse方法

时间:2015-10-22 14:36:49

标签: c++ opencv

我试图找出OpenCV fitEllipse用法的文档化方法。

可在此处找到:http://docs.opencv.org/ref/master/de/dc7/fitellipse_8cpp-example.html

问题在于它根据滑块位置对图像应用阈值,但是与滑块值相关的唯一线与原始图像是:

  

Mat bimage = image> = sliderPos;

然而那个> =对我没有任何意义,并且在bimage / image上使用imshow显示它们是相同的。

有人可以解释一下那里发生了什么吗? 对不起,如果很明显的话。我还不是一个优秀的C ++程序员。

2 个答案:

答案 0 :(得分:1)

在这一行:

createTrackbar("threshold", "result", &sliderPos, 255, processImage);

第四个参数(255)是最大滑块值。最小值始终为0。因此,sliderPos将采用[0,255]范围内的值。

这一行:

Mat bimage = image >= sliderPos;

是一个简单的二值化:bimage是一个二进制图像,如果image中的对应值是>=而不是sliderPos,则每个像素的值为255,否则为0。 它与:

相同
Mat bimage;
threshold(image, bimage, sliderPos-1, 255, THRESH_BINARY);

bimageimage不同。 bimage只有0255个值,而image可以包含[0,255]范围内的任何值。

答案 1 :(得分:1)

documentation中所述,它是二值化(0或255):

  

比较:一个cmpop B,一个cmpop alpha,alpha cmpop A,其中cmpop是   其中一个是>,> =,==,!=,< =,<。比较结果是8位   单通道掩码,其元素设置为255(如果特定的话   元素或元素对满足条件)或0。


现在我尝试解释调用哪些函数的技术部分。 在example you gave之后,我们应该知道变量的类型:

  • imagebimagecv::Mat
  • sliderPos的类型为int

操作员>=的功能可以在mat.hpp中找到,其他包含间接包含。我们正在寻找的功能是:

MatExpr cv::operator>= (const Mat &a, double s)

matop.cpp中,它会调用:

MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, b);

然后调用(第1408行):

res = MatExpr(&g_MatOp_Cmp, cmpop, a, b, Mat(), 1, 1);

这在内部对给定参数(此处为矩阵a和b)应用泛型运算符。结果(因此部分image >= sliderPos)的类型为MatExpr。 最后,Mat bimage的{​​{3}}被称为:

Mat& cv::Mat::operator= (const MatExpr & expr)  

Mat bimage设置为生成的MatExpr对象的值。