OpenCV:检查cv::Point是否已经设置了一个值

OpenCV: Check whether cv::Point has been set a value

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

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() return 一个点...这样做似乎有点笨拙。

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

在某些情况下,某些 return 值在特定域中无效。例如,假设您的 cv::Point 必须是图像中的有效坐标,即坐标必须为正(且小于 width/height)。在这些情况下,您可以 return 这样一个无效值来指示失败,例如cv::Point(-1,-1).

可能选项的总结:

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

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)。