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