OpenCV中的compare


1. 問題引入

一句代碼帶來的思考

Mat thread_mat  = gray > threadvalue

解釋下這句代碼的含義:

1.gray是單通道灰度圖像,與threadvalue進行比較相當於是二值化閾值處理過程

2.將閾值處理結果賦值給thread_mat對象

該函數的作用其實就是圖像的二值化,閾值為threadvalue

 

2. 原理

實際“>”完成的工作是和compare(參數...)一樣的 

函數原型:

1 C++: void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop) 2 Python: cv2.compare(src1, src2, cmpop[, dst]) → dst 3 C: void cvCmp(const CvArr* src1, const CvArr* src2, CvArr* dst, int cmpOp) 4 Python: cv.Cmp(src1, src2, dst, cmpOp) → None 5 C: void cvCmpS(const CvArr* src1, double src2, CvArr* dst, int cmpOp) 6 Python: cv.CmpS(src1, src2, dst, cmpOp) → None

參數說明:

src1:第一個輸入參數,要求是一個單通道Mat或者是一個數值

src2:第一個輸入參數,要求是一個單通道Mat或者是一個數值

dst:輸出結果圖像,類型是CV_8UC1,即單通道8位圖,dst和我們開頭代碼的threat_mat對象表述的意思相同

  dst大小說明:1.當src1和src2的size大小相同單通道圖像時,dst大小即為src1與src2各個像素比較結果                                                

dst(I)=src1(I) compop src2(I)//I 表示某個像素值

                               2.當src1為單通道圖像,src2為某一個標量的常數時,dst各個像素的取值為src1的每個像素與src2的常數比較的結果

dst(I) = src1(I) cmpop src2 //I代表一個像素值 此時的src2為某一標量常數

                               3.當src1為某一標量的常數,src2為單通道圖像時,dst各個像素的取值為src1常數與src2各個像素值進行大小比較結果

dst(I) = src1 cmpop src2(I) //src1是一標量常數,I即表示某個像素值

 

cmPoP:比較方式即當使用compare函數的時候根據以下規則進行src1和src2的比較,比較結果為真dst的像素值置為255.否則0

  • CMP_EQ:src1==src2
  • CMP_GT:src1>src2
  • CMP_GE:src1>=src2
  • CMP_LT:src1<src2
  • CMP_LE:src1<=src2
  • CMP_NE:src1!=src2

         

參考資料鏈接: 

[1]https://docs.opencv.org/2.3/modules/core/doc/operations_on_arrays.html#compare

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM