本章學習輪廓識別
// bbb.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace std;
using namespace cv;
int _tmain()
size refs = size( (int) captrefrnc.get(cv_cap_prop_frame_width),
(int) captrefrnc.get(cv_cap_prop_frame_height) );
bool bhandflag = false;
const char* win_src = "source";
const char* win_result = "result";
// windows
namedwindow(win_src, cv_window_autosize );
namedwindow(win_result, cv_window_autosize);
mat framehsv; // hsv空間
mat mask(frame.rows, frame.cols, cv_8uc1); // 2值掩膜
mat dst(frame); // 輸出影象
// mat framesplit[4];
vector< vector> contours; // 輪廓
vector< vector> filtercontours; // 篩選後的輪廓
vector< vec4i > hierarchy; // 輪廓的結構資訊
vector< point > hull; // 凸包絡的點集
while(true) //show the image captured in the window and repeat
imshow( win_src, frame);
// begin
// 中值濾波,去除椒鹽雜訊
medianblur(frame, frame, 5);
// gaussianblur( frame, framehsv, size(9, 9), 2, 2 );
// imshow("blur2", framehsv);
// pyrmeanshiftfiltering(frame, framehsv, 10, 10);
// imshow(win_blur, framehsv);
// 轉換到hsv顏色空間,更容易處理
cvtcolor( frame, framehsv, cv_bgr2hsv );
// split(framehsv, framesplit);
// imshow(win_h, framesplit[0]);
// imshow(win_s, framesplit[1]);
// imshow(win_v, framesplit[2]);
mat dsttemp1(frame.rows, frame.cols, cv_8uc1);
mat dsttemp2(frame.rows, frame.cols, cv_8uc1);
// 對hsv空間進行量化,得到2值影象,亮的部分為手的形狀
inrange(framehsv, scalar(0,30,30), scalar(40,170,256), dsttemp1);
inrange(framehsv, scalar(156,30,30), scalar(180,170,256), dsttemp2);
bitwise_or(dsttemp1, dsttemp2, mask);
// inrange(framehsv, scalar(0,30,30), scalar(180,170,256), dst);
// 形態學操作,去除雜訊,並使手的邊界更加清晰
mat element = getstructuringelement(morph_rect, size(3,3));
erode(mask, mask, element);
morphologyex(mask, mask, morph_open, element);
dilate(mask, mask, element);
morphologyex(mask, mask, morph_close, element);
frame.copyto(dst, mask);
contours.clear();
hierarchy.clear();
filtercontours.clear();
// 得到手的輪廓
// 去除偽輪廓
for (size_t i = 0; i < contours.size(); i++)
}// 畫輪廓
drawcontours(dst, filtercontours, -1, scalar(0,0,255), 3/*, 8, hierarchy*/);
// 得到輪廓的凸包絡
for (size_t j=0; j
執行效果如下圖所示:
opencv學習 9 輪廓提取
輪廓提取 主要針對二值影象 1 輪廓分為外輪廓和內輪廓 如下圖 外輪廓以c開頭 內輪廓以h開頭 其中img是二值影象,storage是記憶體儲存序列,contours指向儲存的第乙個輪廓,cvmemstorage storage cvcreatememstorage 0 記憶體儲存序列 cvseq ...
opencv學習筆記(15)輪廓發現
參考 python opencv2利用cv2.findcontours 函式來查詢檢測物體的輪廓 試驗用圖 效果 tips 1.如果二值化之後的影象的底色是白色,那麼最後的繪圖會把整張框進去,如圖所示 第三章的邊框是綠色的 這行 因opencv版本而異,opencv2.x和4.x只需要寫成 而ope...
opencv 9 輪廓 性質
邊界矩形的寬高比 x,y,w,h cv2.boundingrect cnt aspect ratio float w h輪廓面積與邊界矩形面積的比 area cv2.contourarea cnt x,y,w,h cv2.boundingrect cnt rect area w h extent f...