c++ - 了解 OpenCV fitEllipse 方法

标签 c++ opencv

我试图找出 OpenCV fitEllipse 用法的记录方法。

可以在这里找到:http://docs.opencv.org/ref/master/de/dc7/fitellipse_8cpp-example.html

问题在于它根据 slider 位置对图像应用了一个阈值,但将 slider 值与原始图像相关的唯一一行是:

Mat bimage = image >= sliderPos;

然而 >= 对我来说毫无意义,并且在 bimage/image 上使用 imshow 显示它们是相等的。

有人可以解释一下那里发生了什么吗? 如果很明显,我很抱歉。我还不是一个出色的 C++ 程序员。

最佳答案

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

Comparison: A cmpop B, A cmpop alpha, alpha cmpop A, where cmpop is one of >, >=, ==, !=, <=, <. The result of comparison is an 8-bit single channel mask whose elements are set to 255 (if the particular element or pair of elements satisfy the condition) or 0.


现在我尝试解释调用哪些函数的更技术性的部分。 关注example you gave首先我们应该知道变量的类型:

  • imagebimagecv::Mat
  • sliderPosint 类型。

运算符 >= 的函数可以在 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 . 最后下面function Mat bimage 被称为:

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

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

关于c++ - 了解 OpenCV fitEllipse 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33283666/

相关文章:

python - OpenCV与Python——如何通过指定坐标实现图像叠加?

c++ - Qt modbus串口流控处理

c++ - 调用复制 ctor 和另一个 ctor

c++ - 如何从 C++ 创建 lua C++ 包装器

c++ - 如何使我的类成员函数无法在 main 中调用?

opencv - OpenCV中的仿射变换坐标集

python - 使用 OpenCV 进行轮廓识别

c++ - Ruby - 将方法作为回调传递给 DLL 库

opencv - 如何获得相机标定矩阵?

opencv - 使用 macports 安装 opencv 非自由特性