国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours()

這篇具有很好參考價值的文章主要介紹了opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours()。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

繪制圖像輪廓:drawContours函數(shù)

在 OpenCV 中,可以使用函數(shù) cv2.drawContours()繪制圖像輪廓。該函數(shù)的語法格式是:

image=cv2.drawContours( image, contours, contourIdx, color[,
thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]] )

其中,函數(shù)的返回值為 image,表示目標圖像,即繪制了邊緣的原始圖像。
該函數(shù)有如下參數(shù):

  1. image:待繪制輪廓的圖像。需要注意,函數(shù) cv2.drawContours()會在圖像 image 上直接繪制輪廓。也就是說,在函數(shù)執(zhí)行完以后,image 不再是原始圖像,而是包含了輪廓的圖像。因此,如果圖像 image 還有其他用途的話,則需要預先復制一份,將該副本圖像傳遞給函cv2.drawContours()使用。

  2. contours:需要繪制的輪廓。該參數(shù)的類型與函數(shù) cv2.findContours()的輸出 contours 相同,都是 list 類型。

  3. contourIdx:需要繪制的邊緣索引,告訴函數(shù) cv2.drawContours()要繪制某一條輪廓還是全部輪廓。如果該參數(shù)是一個整數(shù)或者為零,則表示繪制對應(yīng)索引號的輪廓;如果該值
    為負數(shù)(通常為“-1”),則表示繪制全部輪廓。

  4. color:繪制的顏色,用 BGR 格式表示。

  5. thickness:可選參數(shù),表示繪制輪廓時所用畫筆的粗細。如將該值設(shè)置為“-1”,則表示
    要繪制實心輪廓。

  6. lineType:可選參數(shù),表示繪制輪廓時所用的線型。

  7. hierarchy:對應(yīng)函數(shù) cv2.findContours()所輸出的層次信息。

  8. maxLevel:控制所繪制的輪廓層次的深度。如果值為 0,表示僅僅繪制第 0 層的輪廓;如果值為其他的非零正數(shù),表示繪制最高層及以下的相同數(shù)量層級的輪廓。

  9. offset:偏移參數(shù)。該參數(shù)使輪廓偏移到不同的位置展示出來。

函數(shù) cv2.drawContours()的參數(shù) image 和返回值 image,在函數(shù)運算后的值是相同的。因此,也可以將函數(shù) cv2.drawContours()寫為沒有返回值的形式:

cv2.drawContours( image, contours, contourIdx, color[, thickness[,
lineType[, hierarchy[, maxLevel[, offset]]]]] )

代碼示例:繪制一幅圖像內(nèi)的所有輪廓。

如果要繪制圖像內(nèi)的所有輪廓,需要將函數(shù) cv2.drawContours()的參數(shù) contourIdx 的值設(shè)置為“-1”。
實驗原圖上一節(jié)中有可下載
代碼如下:

import cv2
o = cv2.imread('contours.bmp')
cv2.imshow("original",o)
#將原圖像轉(zhuǎn)換為灰度圖像
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
#將灰度圖像轉(zhuǎn)換為二值圖像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
#尋找輪廓,返回的contours是輪廓的列表,hierarchy是每個輪廓對應(yīng)的屬性
contours, hierarchy = cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#繪制輪廓,contours是輪廓的列表,-1表示繪制所有輪廓,(0,0,255)表示輪廓顏色為紅色,5表示輪廓寬度為5
o=cv2.drawContours(o,contours,-1,(0,0,255),5)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

運行效果如下:

opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours(),opencv,計算機視覺,人工智能,opencv,人工智能,計算機視覺,python,圖像處理
在本程序中,輪廓的顏色被設(shè)置為紅色(由于黑白印刷的原因,在紙質(zhì)書中顯示為灰色),
即(0, 0, 255),參數(shù) thickness(輪廓線條的粗細)被設(shè)置為“5”。

示例2 逐個切割一幅圖像內(nèi)的邊緣信息。

import cv2
import numpy as np
o = cv2.imread('contours.bmp')
#顯示原始圖像
cv2.imshow("original",o)
#將原圖像轉(zhuǎn)換為灰度圖像
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
#將灰度圖像轉(zhuǎn)換為二值圖像
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
#尋找輪廓,返回的contours是輪廓的列表,hierarchy是每個輪廓對應(yīng)的屬性
contours, hierarchy = cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#獲取輪廓的數(shù)量
n=len(contours)
#對每個輪廓進行繪制
contoursImg=[]
for i in range(n):
    #創(chuàng)建空白畫布
 temp=np.zeros(o.shape,np.uint8)
 contoursImg.append(temp)
 #繪制輪廓,contours是輪廓的列表,i表示繪制第i個輪廓,(255,255,255)表示輪廓顏色為白色,5表示輪廓寬度為5
 contoursImg[i]=cv2.drawContours(contoursImg[i],contours,i,(255,255,255),5)
 cv2.imshow("contours[" + str(i)+"]",contoursImg[i])
cv2.waitKey()
cv2.destroyAllWindows()

opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours(),opencv,計算機視覺,人工智能,opencv,人工智能,計算機視覺,python,圖像處理
opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours(),opencv,計算機視覺,人工智能,opencv,人工智能,計算機視覺,python,圖像處理

示例3:使用輪廓繪制功能,提取前景對象。

將函數(shù) cv2.drawContours()的參數(shù) thickness 的值設(shè)置為“-1”,可以繪制前景對象的實心輪廓。將該實心輪廓與原始圖像進行“按位與”操作,即可將前景對象從原始圖像中提取出來。

代碼如下:

import cv2
import numpy as np
o = cv2.imread('loc3.jpg')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#創(chuàng)建空白畫布
mask=np.zeros(o.shape,np.uint8)
#繪制輪廓,contours是輪廓的列表,-1表示繪制所有輪廓,(255,255,255)表示輪廓顏色為白色,-1表示輪廓寬度為-1,表示對輪廓進行填充
mask=cv2.drawContours(mask,contours,-1,(255,255,255),-1)
#顯示掩膜
cv2.imshow("mask" ,mask)
#將原圖像和掩膜進行位運算
loc=cv2.bitwise_and(o,mask)
cv2.imshow("location" ,loc)
cv2.waitKey()
cv2.destroyAllWindows()

本例中將函數(shù) cv2.drawContours()的參數(shù) thickness 設(shè)置為“-1”,得到了前景對象的實心輪
廓 mask。接下來,通過語句“cv2.bitwise_and(o, mask)”,將原始圖像 o 與實心輪廓 mask 進行
“按位與”運算,就得到了原始圖像的前景對象。

運行結(jié)果:

  • 左圖是原始圖像,其前景對象是一朵小花。
  • 中間的圖像是從原始圖像得到的小花的實心輪廓。
  • 右圖是提取的前景對象小花。
    opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours(),opencv,計算機視覺,人工智能,opencv,人工智能,計算機視覺,python,圖像處理
    opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours(),opencv,計算機視覺,人工智能,opencv,人工智能,計算機視覺,python,圖像處理

實驗原圖
opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours(),opencv,計算機視覺,人工智能,opencv,人工智能,計算機視覺,python,圖像處理文章來源地址http://www.zghlxwxcb.cn/news/detail-635859.html

到了這里,關(guān)于opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours()的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • opencv-python3 | cv2.findContours()檢測圖像中物體輪廓

    opencv-python3 | cv2.findContours()檢測圖像中物體輪廓

    輪廓可以簡單地理解為連接所有連續(xù)點(沿物體邊界)的曲線,這些點通常具有相同的顏色或強度。 輪廓在圖像分析中具有重要意義,是物體形狀分析和對象檢測和識別的有用工具,是理解圖像語義信息的重要依據(jù)。 通常,為了提高物體輪廓檢測的準確率,首先要將彩色圖

    2024年02月05日
    瀏覽(34)
  • opencv 基礎(chǔ)54-利用形狀場景算法比較輪廓-cv2.createShapeContextDistanceExtractor()

    opencv 基礎(chǔ)54-利用形狀場景算法比較輪廓-cv2.createShapeContextDistanceExtractor()

    注意:新版本的opencv 4 已經(jīng)沒有這個函數(shù) cv2.createShapeContextDistanceExtractor() 形狀場景算法是一種用于比較輪廓或形狀的方法。這種算法通常用于計算兩個形狀之間的相似性或差異性,以及找到最佳的匹配方式。 下面是一種基本的比較輪廓的流程,使用了形狀場景算法: 數(shù)據(jù)準

    2024年02月13日
    瀏覽(22)
  • 【OpenCV】圖像上繪制文字cv2.putText()函數(shù)用法,添加傾斜透明水印

    【OpenCV】圖像上繪制文字cv2.putText()函數(shù)用法,添加傾斜透明水印

    在OpenCV中,調(diào)用cv2.putText()函數(shù)可添加文字到指定位置,對于需要在圖片中加入文字的場景提供了一種比較直接方便的方式。 注意:OpenCV 不支持顯示中文字符,使用 cv2.putText() 時添加的文本字符串不能包含中文字符(包括中文標點符號) 其函數(shù)原型如下所示: 上述參數(shù)分別

    2024年02月04日
    瀏覽(88)
  • 【OpenCV常用函數(shù):輪廓檢測+外接矩形檢測】cv2.findContours()+cv2.boundingRect()

    【OpenCV常用函數(shù):輪廓檢測+外接矩形檢測】cv2.findContours()+cv2.boundingRect()

    對具有黑色背景的二值圖像尋找白色區(qū)域的輪廓,因此一般都會先經(jīng)過cvtColor()灰度化和threshold()二值化后的圖像作為輸入。 例如,如下的輪廓檢測出的結(jié)果contours和hierarchy。 根據(jù)輪廓點檢測對應(yīng)輪廓的外接矩形

    2024年02月13日
    瀏覽(90)
  • opencv基礎(chǔ)41-圖像梯度-sobel算子詳解cv2.Sobel()(邊緣檢測基礎(chǔ))

    opencv基礎(chǔ)41-圖像梯度-sobel算子詳解cv2.Sobel()(邊緣檢測基礎(chǔ))

    圖像梯度是用于描述圖像變化率的概念。在圖像處理中,梯度指的是圖像中每個像素的灰度值變化速率或方向。它常用于邊緣檢測和圖像特征提取。 一維圖像的梯度表示為函數(shù) f(x) 的導數(shù),而在二維圖像中,梯度是一個向量,包含兩個分量:水平方向和垂直方向的灰度變化率

    2024年02月14日
    瀏覽(25)
  • opencv基礎(chǔ)57-模板匹配cv2.matchTemplate()->(目標檢測、圖像識別、特征提取)

    opencv基礎(chǔ)57-模板匹配cv2.matchTemplate()->(目標檢測、圖像識別、特征提取)

    OpenCV 提供了模板匹配(Template Matching)的功能,它允許你在圖像中尋找特定模板(小圖像)在目標圖像中的匹配位置。模板匹配在計算機視覺中用于目標檢測、圖像識別、特征提取等領(lǐng)域。 以下是 OpenCV 中使用模板匹配的基本步驟: 加載圖像 : 首先,加載目標圖像和要匹配

    2024年02月13日
    瀏覽(17)
  • opencv基礎(chǔ)45-圖像金字塔01-高斯金字塔cv2.pyrDown()

    opencv基礎(chǔ)45-圖像金字塔01-高斯金字塔cv2.pyrDown()

    圖像金字塔(Image Pyramid)是一種用于多尺度圖像處理和分析的技術(shù),它通過構(gòu)建一系列不同分辨率的圖像,從而使得圖像可以在不同尺度下進行處理和分析。圖像金字塔在計算機視覺、圖像處理和計算機圖形學等領(lǐng)域中廣泛應(yīng)用,可以用于目標檢測、特征提取、圖像匹配、尺

    2024年02月13日
    瀏覽(98)
  • 【Python】【OpenCV】關(guān)于cv2.findContours()輪廓索引(編號)解析(RETR_TREE)

    【Python】【OpenCV】關(guān)于cv2.findContours()輪廓索引(編號)解析(RETR_TREE)

    在打算自己實現(xiàn)二維碼的定位的時候,看到了相關(guān)博文的關(guān)于cv2.findContours返回的層級信息來定位三個“回”字從而達到定位二維碼的目的,但是返回的hierarchy中的層級信息分別對應(yīng)的是哪個輪廓卻困擾了許久,查閱了很多資料最后還是自己手動找出了清晰的規(guī)律。 關(guān)于hier

    2024年02月04日
    瀏覽(26)
  • opencv基礎(chǔ)40-禮帽運算(原始圖像減去其開運算)cv2.MORPH_TOPHAT

    opencv基礎(chǔ)40-禮帽運算(原始圖像減去其開運算)cv2.MORPH_TOPHAT

    禮帽運算是用原始圖像減去其開運算圖像的操作。禮帽運算能夠獲取圖像的噪聲信息,或者得到比原始圖像的邊緣更亮的邊緣信息。 例如,圖 8-22 是一個禮帽運算示例,其中: 左圖是原始圖像。 中間的圖是開運算圖像。 右圖是原始圖像減開運算圖像所得到的禮帽圖像。 將

    2024年02月14日
    瀏覽(18)
  • OpenCV筆記:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 與 繪制矩形 cv2.rectangle() 方法介紹

    OpenCV筆記:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 與 繪制矩形 cv2.rectangle() 方法介紹

    ????????模板匹配是用來在一副大圖中搜尋查找模版圖像位置的方法。繪制矩形是用來將模版圖像的匹配結(jié)果展示出來的方法。 ????????模板匹配實現(xiàn)簡單(2~3行代碼),計算效率高,不需要執(zhí)行閾值化、邊緣檢測等操作來生成二值化圖像。 但是: 如果輸入圖像中存

    2024年02月04日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包