OpenCV:检查cv :: Point是否已设置值

时间:2015-03-07 19:14:27

标签: c++ opencv

我想写一个类似于下面的程序:

cv::Point keyPoint
keyPoint = outputOfFunction(); // Return value is not set to anything if no valid results.

if( //keyPoint was set by the function above... ){
  // Do something with this value
else{
  // Do nothing
}

但是cv :: Point没有类似于empty()的成员函数。

实施上述目标的最佳方法是什么?

如果没有有效的结果,我真的不希望outputOfFunction()返回一个点......这样做似乎有些笨拙。

2 个答案:

答案 0 :(得分:3)

可能的选项摘要:

1)通过引用传递并在值有效时返回bool

bool f(cv::Point &p);

2)在失败时返回一些固定值,如cv :: Point(-1,1)

3)返回boost :: optional:

boost::optional<cv::Point> f();

auto might_be_point = f();
if (might_be_point.is_initalized())
    cv::Point point = might_be_point.get();

4)在失败时抛出异常:

class my_logic_exception: public std::exception { }

cv::Point f() {
   if (sth_goes_wrong)
        throw my_logic_exception;
   // ...
}

一般情况下我会建议3)或4)。

答案 1 :(得分:1)

有几种选择。正如Rollen D'Souza在评论中建议的那样,一个选项是返回bool并通过引用传递cv::Point

在某些情况下,某些返回值在特定域中无效。例如,假设您的cv::Point必须是图像中的有效坐标,即坐标必须为正(并且小于宽度/高度)。在这些情况下,您可以返回这样的无效值以指示失败,例如cv::Point(-1,-1)