【发布时间】:2017-08-07 19:06:55
【问题描述】:
我试图在不使用 multiply() 函数的情况下将两个 Mat 类型 A 和 B(灰度)相乘。 到目前为止,我开发了以下代码,但它不起作用。我检查了 multiply(A,B,AB) 函数,但下面的代码不起作用。
Mat A,B,AB, src;
float AB_yx;
src = imread("as.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Sobel(src , A, CV_32FC1 , 1, 0, 3, BORDER_DEFAULT);
Sobel(src , B, CV_32FC1 , 0, 1, 3, BORDER_DEFAULT);
// multiply(A, B, AB); //worked
AB= src.clone();
for (int y = 0; y < A.rows; y++) {
for (int x = 0; x < B.cols; x++) {
AB_yx= 0;
for (int y = 0; y < B.rows; y++) {
// for (int k = 0; k < B.rows; k++) {
AB.at<float>(y, x) = A.at<float>(y, x) * B.at<float>(y, x); //sturkmen's method
//AB_yx = AB_yx + A.at<float>(y, k) * B.at<float>(k, x);//
}
//AB.at<float>(y, x) = AB_yx;
}
}
namedWindow("AB");
imshow("AB", AB);
问题 Visual Studio 给出的 abort() 已被调用
OpenCV Error: Assertion failed (((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file d:\opencv\opencv\build\include\opencv2\core\mat.inl.hpp, line 957
【问题讨论】:
-
“下面的代码不起作用”你能说得更具体点吗?
-
你知道如何将矩阵相乘吗?
-
您编写的代码执行每个成员的乘法,而不是矩阵乘法。这完全是错误的算法。
-
您能向我们展示您的全部功能吗?这里有很多缺失的代码。 AB是怎么产生的? AB_yx 是什么?见stackoverflow.com/help/mcve
-
@komto909 问题仍然存在:您需要向我们提供完整的
multiply()功能。除非我们可以重现编译器中止,否则我们根本没有足够的信息来帮助您。