这是我使用的代码:
cv::Mat mask, foreground;
std::thread t(cv::threshold, mask, foreground, 254, 255, cv::THRESH_BINARY);
t.join();
使用支持C ++ 11的Xcode 8进行编译。有什么想法吗?
以下是完整的错误消息:
在/Users/mlitvin/xcode/Create/ImageProcUtils.cpp:13中包含的文件中: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:347:5:错误:尝试使用已删除的功能 __invoke(_VSTD :: move(_VSTD :: get(__ t)),_ VSTD :: move(_VSTD :: get(__ t))...); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:357:5:注意:在实例化函数模板特化' std: :__ 1 :: __ thread_execute'这里要求 __thread_execute(* __ p,_Index()); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:369:42:注意:在实例化函数模板特化' std: :__ 1 :: __ thread_proxy>'这里要求 int __ec = pthread_create(& __ t_,0,& __ thread_proxy,__ p.get()); ^ /Users/mlitvin/xcode/Create/ImageProcUtils.cpp:71:21:注意:在实例化函数模板特化' std :: __ 1 :: thread :: thread'这里要求 std :: thread t(cv :: threshold,mask,foreground,254,255,cv :: THRESH_BINARY); ^ 文件包括:368: 文件包括:3: 在/Users/mlitvin/xcode/Create/Create/Create_Prefix.h:25中包含的文件中: 在/Users/mlitvin/xcode/Create/3rdParty/OpenCV-2.3.1/modules/imgproc/include/opencv2/imgproc/imgproc.hpp:50中包含的文件中: 在/Users/mlitvin/xcode/Create/3rdParty/OpenCV-2.3.1/modules/core/include/opencv2/core/core.hpp:56中包含的文件中: 在/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:625中包含的文件中: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:1087:5:注意:' ~__nat'已在此明确标记删除 ~__nat()=删除; ^ 生成1个错误。
修改1:
看起来问题在于将cv::OutputArray
类型的对象作为参数传递。
答案 0 :(得分:0)
我设法通过添加一个代理函数来解决这个问题,其中只有输出通过引用传递:
void cv_threshold(cv::Mat _src, cv::Mat& _dst, double thresh, double maxval, int type) {
cv::threshold(_src, _dst, thresh, maxval, type);
}
...
cv::Mat mask, foreground;
std::thread t(cv_threshold, mask, std::ref(foreground), 254, 255, cv::THRESH_BINARY);
t.join();
我很高兴知道为什么原始方法不起作用 - 会接受解释这个问题的答案。