我正在尝试编写一个返回最大检测对象中心点的函数。这里没问题。问题是如果用户想要使用它,我还想从参数中返回前景掩码。
为了处理这种情况,我的解决方案如下:
cv::Point detect(const cv::Mat &img, cv::Mat &mask = *new cv::Mat());
如果mask
指定了参数,则可以在main
. RAII 在其他情况下是否有效,还是会出现内存泄漏?
注意:我知道我可以将函数重载 2 行,但我想知道是否可以通过使用默认参数而不是使用指针来正确执行此操作(输入类型是严格的)。
另一个注意事项:如果cv::noArray()
可以使用或类似的功能,那是完全可以的。
示例用法:
char ch = 0;
while (ch != 27) // ESC is pressed
{
cap >> img;
if (img.empty())
break;
cv::Mat mask;
cv::Point pt = detect(img, mask);
// or pt = detect(img);
cv::imshow("original", img);
cv::imshow("foreground", mask);
ch = cv::waitKey(1);
}