OPENCV繪製指定色塊的輪廓和形心

2021-10-02 09:53:58 字數 3023 閱讀 4419

效果展示:

思路是將轉化為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,...