【发布时间】:2012-02-03 07:46:46
【问题描述】:
我有一个计算卷积的函数(以测试我们是否对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 package)*
当我从 opencv 存储加载外部数据时发生了类似的事情,直到我使用 data( loaded.clone())
【问题讨论】: