小编bis*_*nga的帖子

OpenCV中的矩阵乘法

我在OpenCV中有两个Mat图像:

Mat ft = Mat::zeros(src.rows,src.cols,CV_32FC1);
Mat h = Mat::zeros(src.rows,src.cols,CV_32FC1);
Run Code Online (Sandbox Code Playgroud)

两个图像都是相同的尺寸,并且是从单个源图像计算出来的.

我想将这两个图像相乘但尝试使用这两个图像

Mat multiply1 = h*ft;

Mat multiply2;
gemm(h,ft,1,NULL,0,multiply2);
Run Code Online (Sandbox Code Playgroud)

但两者都会导致以下断言失败:

OpenCV错误:断言失败(a_size.width == len)在未知函数中,文件... matmul.cpp抛出'cv :: exception'后调用终止

我究竟做错了什么?

opencv

37
推荐指数
1
解决办法
9万
查看次数

opencv:将Scalar转换为float或double类型

任何人都可以帮助我将标量类型的openCV转换为float或double等基本类型吗?

Scalar Sum1=sum(arg1),Sum2=sum(arg2);
theta.at<float>(i,j)=0.5*atan(Sum1/Sum2);
Run Code Online (Sandbox Code Playgroud)

我必须对Mat对象的所有元素arg1arg2(邻域和)求和,然后我必须执行它们的除法以在每个像素处找到方向场.我执行了总和,但由于我必须应用arctan函数,标量类型不适合.任何人都可以帮助我将标量类型转换为基本类型吗?

实际上我正在尝试应用log-gabor过滤器,到目前为止我所做的代码是:

//function to enhance fingerprint by log-gabor filter

void filter(Mat src, Mat finalImage)
{

//Sobel derivatives for orientation estimation

Mat grad_x,grad_y,grad2_x,grad2_y,fImage;
src.convertTo(fImage, CV_32F);

//1st and second order gradient

Sobel(fImage,grad_x,CV_32F,1,0,3);
Sobel(fImage,grad_y,CV_32F,0,1,3);    
Sobel(fImage,grad2_x,CV_32F,2,0,3);
Sobel(fImage,grad2_y,CV_32F,0,2,3);

//orientation estimation

Mat theta=Mat::zeros(fImage.size(),CV_32F);
Size block=Size(12,12);
copyMakeBorder(grad_x, grad_x, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));

copyMakeBorder(grad2_x, grad2_x, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));

copyMakeBorder(grad_y, grad_y, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));

copyMakeBorder(grad2_y, grad2_y, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));
Size …
Run Code Online (Sandbox Code Playgroud)

c scalar opencv

14
推荐指数
2
解决办法
3万
查看次数

标签 统计

opencv ×2

c ×1

scalar ×1