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:




  1. //! per-element matrix multiplication by means of matrix expressions
  2. 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:


  1. #include 'core/core.hpp'
  2. #include 'iostream'
  3. using namespace std
  4. using namespace cv
  5. int main(int argc,char *argv[])
  6. {
  7. Mat A=Mat::ones(2,3,CV_8UC1)
  8. Mat B=Mat::ones(2,3,CV_8UC1)
  9. A.at(0,0)=60
  10. A.at(0,1)=2
  11. A.at(0,2)=3
  12. A.at(1,0)=4
  13. A.at(1,1)=5
  14. A.at(1,2)=6
  15. B.at(0,0)=60
  16. B.at(0,1)=2
  17. B.at(0,2)=3
  18. B.at(1,0)=4
  19. B.at(1,1)=5
  20. B.at(1,2)=6
  21. Mat AB=A.mul(B)
  22. cout<<'A= '< endl<<endl
  23. cout<<'B= '< endl<<endl
  24. cout<<'AB= '< endl<<endl
  25. system('pause')
  26. }


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.