效果展示:
思路是將轉化為hsv格式,然後用inrange函式變為黑白二值化影象,二值化影象有噪點時用開操作閉操作去除,用canny運算元檢測邊緣,findcontours函式尋找輪廓,再計算輪廓矩 和中心,再繪製輪廓和形心
轉化為hsv格式
圖為各種顏色的hsv值對應表
cvtcolor
(src, hsv, cv_bgr2hsv)
;//直接轉換為hsv
貼上詳細介紹hsv的博文
hsv效果圖
inrange函式
//inrange函式可以將指定顏色轉化為白色,其他顏色轉化為黑色
inrange
(hsv,
scalar(26
,43,46
),scalar(34
,255
,255
), temp)
;
第乙個變數為輸入的hsv,第二個是某顏色對應的hsv_min值,第三個是某顏色對應的hsv_max值,第四個是輸出的影象
效果圖canny函式
//對得到的二值化影象進行邊緣檢測
效果圖尋找輪廓
findcontours
point(0
,0))
;
計算輪廓矩 和輪廓中心
//計算輪廓矩
vector
mu(contours.
size()
);for(
int i =
0; i < contours.
size()
; i++
)//計算輪廓中心
vector
mc(contours.
size()
);for(
int i =
0; i < contours.
size()
; i++
)
繪製輪廓標和標定形心
mat drawing = mat::
zeros
(temp.
size()
, cv_8uc3)
;for
(int i =
0; i < contours.
size()
; i++
)
**少了降噪部分,圖是自己畫的比較清晰沒有噪點等問題就沒有寫。
除此之外還出現了一些問題
問題
指點藍色時沒達到效果。
標定紫色時星星的形心不在中間。
以上兩個問題還想不到解決方法。。。
最後
貼上findcontours和drawcontours使用介紹
完整**如下:
#include
#include
#include
#include
#include
#include
using
namespace std;
using
namespace cv;
mat hsv;
mat temp;
string colour;
//宣告choose函式。
void
choose()
;//主函式
intmain()
//計算輪廓中心
vector
mc(contours.
size()
);for(
int i =
0; i < contours.
size()
; i++
)//繪製輪廓標定形心
mat drawing = mat::
zeros
(temp.
size()
, cv_8uc3)
;for
(int i =
0; i < contours.
size()
; i++
)imshow
("output"
, src)
;waitkey(0
);return(0
);}//選擇函式
void
choose()
opencv尋找輪廓 繪製輪廓 輪廓層級原理
void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierarchy,int mode,int method,point offset point 引數image inputarray型...
OpenCV中的輪廓發現和輪廓繪製
實現 import cv2 import numpy as np 輪廓發現和輪廓繪製 img是一張與binary類似的二值圖,contours是list列表結構每個元素包含乙個邊沿資訊,heriachy是乙個矩陣,用處作者也未知,可以 contours,heriachy cv2.findcontou...
Opencv之外形輪廓繪製
相關理論知識 相關程式 include stdafx.h 本節講述 影象處理之 輪廓發現 include include include using namespace std using namespace cv void contours demo int void mat src,test1,...