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)。
我想写一个类似于下面的程序:
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)。