我正在尝试学习 OpenCV(使用 3.0.0 版)。现在我正在尝试查看点操作对各种图像的作用,一切都很好,直到我尝试进行幅度操作,这需要输入的形式为
magnitude(InputArray x, InputArray y, OutputArray magnitude)
它还描述了 x 和 y 应该是向量的 x/y 坐标的浮点数组,并且大小也相同。
我尝试制作一个 Mat 向量并将输入图像拆分为这些向量,然后对它们进行幅度运算符,但这没有用。所以我认为我需要将参数作为列和行传递,但现在我得到了错误
OpenCV Error: Assertion failed (src1.size() == src2.size() && type == src2.type() && (depth == CV_32F || depth == CV_64F)) in magnitude, file /home/<user>/opencv-3.0.0-beta/modules/core/src/mathfuncs.cpp, line 521
terminate called after throwing an instance of 'cv::Exception'
what(): /home/<user>/opencv-3.0.0-beta/modules/core/src/mathfuncs.cpp:521: error: (-215) src1.size() == src2.size() && type == src2.type() && (depth == CV_32F || depth == CV_64F) in function magnitude
Aborted (core dumped)
而且我不确定为什么,因为我清楚地将输入 Mats 转换为 CV_64F 类型。我使用幅度函数错了吗?或者只是传递错误的数据?
void Magnitude(Mat img, Mat out)
{
img.convertTo(img, CV_64F);
out.convertTo(out, CV_64F);
for(int i = 0 ; i < img.rows ; i ++)
for(int j = 0 ; j < img.cols ; j++)
cv::magnitude(img.row(i), img.col(j), out.at<cv::Vec2f>(i,j));
cv::normalize(out,out,0,255,cv::NORM_MINMAX);
cv::convertScaleAbs(out,out);
cv::imshow("Magnitude", out);
waitKey();
}