今天本打算對一黃色網布做位置形狀檢查。用手機拍了一張白底的**,放到電腦中處理。本以為按照標準流程,讀圖-〉灰度圖-〉二值圖-〉腐蝕或膨脹-〉查詢外輪廓-〉求形心找最小外接矩形求傾斜角度。出叉了。由於光源不行,物體本身黃色(rgb:255,255,0),這種方式得到外輪廓基本沒戲(如圖1)
我們知道輪廓內外差別越大,輪廓越容易得到。注意到白色rgb為255,255,255;物體與背景在b通道上的差距明顯。因此,是否可以在b通道上做識別呢?先嘗試一下通道分離吧!
函式cvsplit()分別複製每個通道到多個單通道影象。
void cvsplit( const cvarr* src, cvarr* dst0, cvarr* dst1, cvarr* dst2, cvarr* dst3 );.cvsplit()函式將複製src的各個通道到影象dst0,dst1,dst2和dst3中。如果源影象少於4個通道的情況下,那麼傳遞給cvsplit()的不必要的目標引數可設定為null。使用時注意,源影象const cvarr* src應為多通道影象;目標影象cvarr* dst0, cvarr* dst1, cvarr* dst2,和cvarr* dst3應為單通道影象,以上影象的size應該一樣大。還有一點需要注意的是opencv中rgb通道順序為 b g r。
從上圖可以看出,藍色通道對比度最高。因此用藍色通道來二值化。
OpenCV 輪廓處理
在qt中使用opencv庫,下面是輪廓處理的程式 void secondwindow on pushbutton 4 clicked else cvsmooth gray,gray,cv gaussian,3,3,0,0 cvsmooth函式平滑濾波 cvseq contour 0 cvseq型別 ...
opencv之輪廓發現
opencv版本 3.4.7 編譯器版本 vs2019 在二值影象上發現輪廓 findcontoursapi void findcontours inputoutputarray image,輸入影象,非0影象看做1,0畫素保持不變,8bit outputarrayofarrays contours...
opencv學習(四)輪廓識別
本章學習輪廓識別 bbb.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std using namespace cv int tmain size refs size int captrefrnc.get cv cap prop...