函式原型
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型,
如果文章幫助到你了,可以點個贊讓我知道,我會很快樂~加油!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292623.html
標籤:AI
