Matrixi maatriksi korrutamine Opencv-dot toote, punkt, mul operatsioon
Multiplication Mat Matrix Opencv Dot Product
Kordustrükk: https://blog.csdn.net/dcrmg/article/details/52404580
Opencv-s arvutab mul kahe Mat-maatriksi vastavate bittide korrutise, nii et operatsioonis osalevate maatriksi A ja B ridade ja veergude arv peab olema sama. Arvutustulemuseks on Matrixi maatriks, millel on sama arv ridu või veerge kui A või B.
Multifunktsioon Opencv'is:
- //! per-element matrix multiplication by means of matrix expressions
- MatExpr mul(InputArray m, double scale=1) const
Võttes näiteks lihtsa juhtumi, Mat * maatriksite A ja B suuruseks 2 * 2:
Tehke A ja B abil mitu toimingut:
mul kirjeldus:
1. Mul-operatsioonil ei ole andmetüübi nõudeid operatsioonis osalevatele kahele maatriksile A ja B, kuid see nõuab, et A ja B tüübid oleksid samad, vastasel juhul teatatakse veast
kaks. Mat AB = A.mul (B) , Kui AB-deklareerimisel pole AB-tüüpi andmetüüp määratletud, on AB-vaiketüüp A-ga ja B-ga sama ;
3. Kui AB täpsusest ei piisa, võib tekkida ülevool ja ületäituv väärtus seatakse praeguse täpsuse järgi maksimaalsele väärtusele;
Avamise kontrollimine:
- #include 'core/core.hpp'
- #include 'iostream'
- using namespace std
- using namespace cv
- int main(int argc,char *argv[])
- {
- Mat A=Mat::ones(2,3,CV_8UC1)
- Mat B=Mat::ones(2,3,CV_8UC1)
- A.at(0,0)=60
- A.at(0,1)=2
- A.at(0,2)=3
- A.at(1,0)=4
- A.at(1,1)=5
- A.at(1,2)=6
- B.at(0,0)=60
- B.at(0,1)=2
- B.at(0,2)=3
- B.at(1,0)=4
- B.at(1,1)=5
- B.at(1,2)=6
- Mat AB=A.mul(B)
- cout<<'A=
'< endl<<endl
- cout<<'B=
'< endl<<endl
- cout<<'AB=
'<
endl<<endl - system('pause')
- }
Väljund:
AB esimene element peaks olema 60 * 60 = 360, kuid AB vaiketüüp on CV_8UC1, see tähendab, et maksimaalne väärtus võib olla ainult 255Mitme toimingu tegemiseks tuleb AB määratleda ületäitumise vältimiseks piisava täpsusega.