OpenCV - 分配操作员"not working" ?
OpenCV - assign operator "not working"?
我有一个函数要计算卷积(以测试我们是否使用了filter2D
的正确设置),我认为函数体并不重要,所以这里只有标题和结尾:
template<typename T>
cv::Mat conv(const cv::Mat &input, const cv::Mat &kernel) {
cv::Mat output(input); // or should I rather use output( input.rows, input.cols, input.depth())?
...
return output;
}
cv::Mat result = conv( input, kernel);
在这一点上,我在result
中得到了完全无用的结果(这些甚至不是随机数据,它们有一些奇怪的模式,每次运行函数时都会重复)。
当我将函数重写为:时
template<typename T>
void conv(const cv::Mat &input, cv::Mat &output, const cv::Mat &kernel) {
...
}
cv::Mat result(input);
conv( input, result, kernel);
一切都很好,结果矩阵包含了它应该包含的内容。
所以我的问题是:第一种方法出了什么问题?我做错什么了吗?为什么分配运算符/函数返回不起作用?
*注:OpenCv版本:extra/OpenCv 2.3.1_a-3(archlinux包)*
当我从opencv存储加载外部数据时,发生了类似的事情,数据丢失,直到我使用data( loaded.clone())
好吧,filter2d
或您所做的任何事情似乎都不能"就地"工作,也就是说,当输入和输出相同时。使用功能中的第一行,
cv::Mat output(input); // or should I rather use output( input.rows, input.cols, input.depth())?
您使输出指向与输入相同的数据!这不是的克隆,而是另一个参考!
你想做什么写在你的评论里。另一种选择可能是(取决于您的代码)让输出完全未初始化,因为通常C++OpenCV函数会为您初始化它们的输出矩阵,如果它们是空的。
请注意,即使给出适当的results
,你的conv()
也会在途中破坏你的input
矩阵OpenCV在其内部数据引用机制中不尊重const。是的,这是糟糕的设计。
相关文章:
- GDB - strcmp not working: __strcmp_sse2_unaligned
- QT qScriptConnect is not working
- QDesktopServices::openUrl() not working Qt
- C++ std::set ordering not working with customer class*
- C++ SetWindowText not working
- visual studio 2012 c++ hello world - iostream not working
- getGravity not working?
- Opencv findcontours CV_RETR_EXTERNAL not working
- c++ srand() not working
- std::queue::empty() not working?
- BCB swprintf not working
- 将类型作为指向另一个类的对象的指针的泛型类-NOT WORKING
- LoadLibrary is not working
- gluUnProject not working
- C++ catch bad_alloc not working
- updatelayeredwindow not working
- OpenMP set_num_threads() is not working
- glOrtho not working
- Cuda atomicInc not working
- WinAPI DestroyWindow not working