作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
函数原型
void divide(InputArray src1, InputArray src2, OutputArray dst,
double scale = 1, int dtype = -1);
void divide(double scale, InputArray src2,
OutputArray dst, int dtype = -1);
参数说明
divide有两个重载函数,主要介绍第一个。第一个是scale*X/Y,第二个是scale/Y,其中sacle是常数。
- InputArray类型的src1,输入的第一幅图像。
- InputArray类型的src2,输入的第二幅图像。
- OutputArray类型的dst,除法运算后的结果。
- double类型的scale,常数因子。
- int类型的dtype,控制输出图像的类型,如果src1和src2类型一致,该值就是-1;如果不一致,该值就对应图像类型,比如当值为0的时候,输出的结果就是CV_8U,值为5的时候,输出的结果就是CV_32F。
测试代码
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 随机生成一个矩阵
cv::Mat src(10, 10, CV_32FC1);
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 10; ++j)
{
src.at<float>(i, j) = rand() % 255;
}
}
Mat other1 = Mat::zeros(10, 10, CV_32FC1);
Mat other2 = Mat::ones(10, 10, CV_8UC1);
other1.at<float>(2, 2) = 10;
other2.at<uchar>(2, 2) = 10;
Mat result1,result2;
divide(src, other1, result1);
divide(src, other2, result2,0.1,5);
system("pause");
return 0;
}
测试效果
测试代码中,随机生成10*10的数据矩阵src,用全零矩阵other1先进行除法,设置第二行第二列的值为10,第一次除法运算后,结果只有第二行第二列的点完成了除法,其他全是零值,这是因为函数说明中提到过,除以0还是0;再用全1矩阵other2进行除法,结果符合预期,但是有个注意事项,scale代表除法的结果再乘以的常数因子,还有最后一个参数dtype表示结果的图像类型,比如测试中是5,那么结果矩阵就是CV_32FC,也就是float型。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容